Board logo

标题: [日期时间] if 1%yy% LSS 200 if 1%yy% LSS 170 这句是什么意思,不太懂 [打印本页]

作者: swanseabrian    时间: 2021-7-29 15:52     标题: if 1%yy% LSS 200 if 1%yy% LSS 170 这句是什么意思,不太懂

@echo off
set FilePath=C:\test\
set DaysAgo=10

reg add "HKCU\Control Panel\International" /v sShortDate /t REG_SZ /d yyyy-M-d /f
call ateToDays %date:~0,4% %date:~5,2% %date:~8,2% PassDays
set /a PassDays-=%DaysAgo%
call :DaysToDate %PassDays% DstYear DstMonth DstDay
set DstDate=%DstYear%-%DstMonth%-%DstDay%

for /r "%FilePath%" %%a in (*.*) do (if "%%~ta" leq "%DstDate%" (if exist "%%a" (del /a /f /s /q "%%a")))

:DateToDays %yy% %mm% %dd% days
setlocal ENABLEEXTENSIONS
set yy=%1&set mm=%2&set dd=%3
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
set /a dd=100%dd%%%100,mm=100%mm%%%100
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
endlocal&set %4=%j%&goto :eof

:DaysToDate %days% yy mm dd
setlocal ENABLEEXTENSIONS
set /a a=%1+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
(if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
endlocal&set %2=%yy%&set %3=%mm%&set %4=%dd%&goto :eof

我看到这个程序
if 1%yy% LSS 200 if 1%yy% LSS 170 这一句不太明白什么意思,哪位大神可以帮我一下吗

我自己测试这个%yy% 是2021,也就是年份,年从前再加个1,怎么会小于200呢, 而且他这句也不通好像,连续两个if,可以帮我一下吗,谢谢
作者: yakeyun    时间: 2021-7-29 17:33

本帖最后由 yakeyun 于 2021-7-29 17:36 编辑

回复 1# swanseabrian


截获一下数据看看yy的值。

set yy=%1&set mm=%2&set dd=%3
echo,%yy%
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
pause>nul

然后用截获的值带入下面的代码中测试
已知,如果yy的值在70~99之间时,执行num2,小于70时执行num1

@echo off
set yy=69
echo,%yy%
if 1%yy% LSS 200 if 1%yy% LSS 170 (echo,num1) else (echo,num2)
echo,1%yy%
pause>nul
exit
作者: swanseabrian    时间: 2021-7-29 18:48

回复 2# yakeyun


    YY值不就是年份吗 2021   我处理出来是2021,所以我比较蒙,就在这里
作者: newswan    时间: 2021-7-29 20:07

本帖最后由 newswan 于 2021-7-29 20:10 编辑
  1. if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
复制代码
等同
  1. if 1%yy% LSS 200 (
  2.     if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
  3. )
复制代码
第一个if 判断是4位数还是2位数

前面
  1. reg add "HKCU\Control Panel\International" /v sShortDate /t REG_SZ /d yyyy-M-d /f
复制代码
已经设置了yyyy是4位数
作者: newswan    时间: 2021-7-29 20:15

回复 1# swanseabrian


  最好把 代码 放在代码段中
作者: yakeyun    时间: 2021-7-29 20:19

回复 3# swanseabrian


yyyy才是完整的年份,你的代码涉及到多个set,所以要用PAUSE截取数据分析。
作者: swanseabrian    时间: 2021-7-29 20:25

  1. @echo off
  2. set FilePath=C:\test\
  3. set DaysAgo=10
  4. reg add "HKCU\Control Panel\International" /v sShortDate /t REG_SZ /d yyyy-M-d /f
  5. call :DateToDays %date:~0,4% %date:~5,2% %date:~8,2% PassDays
  6. set /a PassDays-=%DaysAgo%
  7. call :DaysToDate %PassDays% DstYear DstMonth DstDay
  8. set DstDate=%DstYear%-%DstMonth%-%DstDay%
  9. for /r "%FilePath%" %%a in (*.*) do (if "%%~ta" leq "%DstDate%" (if exist "%%a" (del /a /f /s /q "%%a")))
  10. :DateToDays %yy% %mm% %dd% days
  11. setlocal ENABLEEXTENSIONS
  12. set yy=%1&set mm=%2&set dd=%3
  13. if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
  14. set /a dd=100%dd%%%100,mm=100%mm%%%100
  15. set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
  16. set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
  17. endlocal&set %4=%j%&goto :eof
  18. :DaysToDate %days% yy mm dd
  19. setlocal ENABLEEXTENSIONS
  20. set /a a=%1+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a
  21. set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5
  22. set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10
  23. (if %mm% LSS 10 set mm=0%mm%)&(if %dd% LSS 10 set dd=0%dd%)
  24. endlocal&set %2=%yy%&set %3=%mm%&set %4=%dd%&goto :eof
复制代码
回复 6# yakeyun


    这是代码,是从date函数获取的值
作者: swanseabrian    时间: 2021-7-29 20:30

回复 4# newswan


    请问第一个if为什么是判断是位数呀,就是这里不太懂,哪里有这方面的资料呢,谢谢
作者: newswan    时间: 2021-7-29 21:13

本帖最后由 newswan 于 2021-7-29 21:17 编辑

回复 8# swanseabrian


因为后面部分是给2位数年份加到4位数的,所以前面有一个这个判断
虽然在这里用不着。。但作为子程序需要考虑的。
  1. :DateToDays %yy% %mm% %dd% days
复制代码

作者: swanseabrian    时间: 2021-7-29 21:29

回复 9# newswan


    那直接用100 跟70不行吗,前面加个1是不是多此一举了,如果 是两位数年份的话,用100 跟70判断不行吗,干啥用200跟170,这里还有点迷或
谢谢
作者: newswan    时间: 2021-7-29 22:19

本帖最后由 newswan 于 2021-7-29 22:26 编辑

回复 10# swanseabrian


没必要加1,至于这么写,个人习惯,数字比较的时候,加1个数字,避免变量空值报错
作者: Batcher    时间: 2021-7-29 23:41

回复 1# swanseabrian


    对于两位数字表示的年份,比如2009年,如果直接用09进行比较或者计算会被认为是八进制数字从而出错。
作者: swanseabrian    时间: 2021-7-30 09:06

回复 12# Batcher


    我也是这么想的,不过找不到理由,谢谢




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2