标题: [日期时间] 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 编辑
- if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
复制代码
等同- if 1%yy% LSS 200 (
- if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
- )
复制代码
第一个if 判断是4位数还是2位数
前面- 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
- @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 :DateToDays %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
复制代码
回复 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位数的,所以前面有一个这个判断
虽然在这里用不着。。但作为子程序需要考虑的。- :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 |