[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[日期时间] 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: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

TOP

回复 2# yakeyun


    YY值不就是年份吗 2021   我处理出来是2021,所以我比较蒙,就在这里

TOP

本帖最后由 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位数

TOP

回复 1# swanseabrian


  最好把 代码 放在代码段中

TOP

回复 3# swanseabrian


yyyy才是完整的年份,你的代码涉及到多个set,所以要用PAUSE截取数据分析。

TOP

  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函数获取的值

TOP

回复 4# newswan


    请问第一个if为什么是判断是位数呀,就是这里不太懂,哪里有这方面的资料呢,谢谢

TOP

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

回复 8# swanseabrian


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

TOP

回复 9# newswan


    那直接用100 跟70不行吗,前面加个1是不是多此一举了,如果 是两位数年份的话,用100 跟70判断不行吗,干啥用200跟170,这里还有点迷或
谢谢

TOP

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

回复 10# swanseabrian


没必要加1,至于这么写,个人习惯,数字比较的时候,加1个数字,避免变量空值报错

TOP

回复 1# swanseabrian


    对于两位数字表示的年份,比如2009年,如果直接用09进行比较或者计算会被认为是八进制数字从而出错。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 12# Batcher


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

TOP

返回列表