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

[日期时间] 一段计算日期间隔的批处理代码死活看不懂,,

本帖最后由 likeyou32 于 2024-3-12 16:54 编辑
  1. @echo off
  2. set "DateA=2024-03-12"
  3. set "DateB=2024-02-28"
  4. call :DateToDays %DateA:~0,4% %DateA:~5,2% %DateA:~8,2% DaysX
  5. call :DateToDays %DateB:~0,4% %DateB:~5,2% %DateB:~8,2% DaysY
  6. set /a DayZ=DaysX-DaysY
  7. echo %DateA%和%DateB%间隔的天数是:%DayZ%
  8. goto :eof
  9. :DateToDays %yy% %mm% %dd% days
  10. setlocal ENABLEEXTENSIONS
  11. set yy=%1&set mm=%2&set dd=%3
  12. if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
  13. set /a dd=100%dd%%%100,mm=100%mm%%%100
  14. set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
  15. set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
  16. endlocal&set %4=%j%&goto :EOF
复制代码
第12行:set yy=%1&set mm=%2&set dd=%3  把变量yy设为1%,1%为第4行或第5行的第一个参数取值,后边的mm dd以此类推,,
第13行的1%yy%  是什么东西? 1%还是代表前边第4行的%DateA:~0,4%,可yy%又是什么东西呢 ? 按说应该两个百分号%yy%才对啊,前边12行yy已经等于1%了,实在不清楚1%yy% 表示啥意思了 ?

上边是原贴,%1、%4这才代表call后的参数,1%根本就没这个表示法,或者就代表百分之一。

本帖最后由 likeyou32 于 2024-3-12 10:26 编辑

回复 2# ShowCode


    谢谢, 其实后边这几行没看懂,到底逻辑思维是啥呀? 我把dateA dateB 带入几个日期测试了一下,差的天数倒是正确的,但一直没明白怎么计算出来的,还有以前都是禁止变量延迟,这里专门setlocal ENABLEEXTENSIONS,为什么要这样设置啊
  1. if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)
  2. set /a dd=100%dd%%%100,mm=100%mm%%%100
  3. set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2
  4. set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633
复制代码

TOP

回复 6# ShowCode


    感谢 ,,

TOP

回复 5# Five66


   
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%)  这行我也认为不会运行,毕竟yy是call后第一个参数%DateA:~0,4%,截取的是4位,前边再加1,怎么可能会小于200呢!
后边的set /a dd=100%dd%%%100,mm=100%mm%%%100 这行,%%是取余,目的是将10号之前的日期如09什么的,变成9。 再往后的两行代码 set /a z=..j=..的,是说啥里也看不懂了,还有为什么用setlocal ENABLEEXTENSIONS 也不太明白,以前都是setlocal enabledelayedexpansion禁止环境变量延迟。

TOP

返回列表