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

[数值计算] [已解决]批处理日期计算的代码如何理解?

  1. @echo off&setlocal enabledelayedexpansion
  2. set yyyy=%date:~0,4%
  3. set mm=%date:~5,2%
  4. set dd=%date:~8,2%
  5. set /a od=!dd!-1
  6. if !od!==0 call :dd0
  7. if !mm!==0 call :mm0
  8. set yyyymmdd=!yyyy!年!mm!月!od!日
  9. echo 昨天是:!yyyymmdd!
  10. pause
  11. :dd0
  12. set /a mm=!mm!-1
  13. for %%a in (1 3 5 7 8 10 12)do set %%add=31
  14. set /a pddd=!yyyy!*10/4
  15. set pd2d=!pddd:~-1,1!
  16. set 2dd=28
  17. if !pd2d!==0 set 2dd=29
  18. for %%b in (4 6 9 11)do set %%bdd=30
  19. set od=!%mm%dd!
  20. goto :eof
  21. :mm0
  22. set /a yyyy=!yyyy!-1
  23. set mm=12 && set od=31
  24. goto :eof
复制代码
请问set od=!%mm%dd!其中的dd是如何定义的?是否代表的2dd/add/bdd,为何可以这样定义呢?{}

[ 本帖最后由 zc584267913 于 2010-5-12 05:51 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

寒夜大大,貌似你写的代码有点问题哦,我5月4号运行的,计算出来的是4月29日哦````

还有就是下面那段小弟有点看不明白,麻烦解释一下```如set/a "T=^!(M-2)"中的
^!是什么意思?

set/a "T=^!(M-2)","R=(^!(Y%%4)&^!^!(Y%%100))|^!(Y%%400)","C=^!(M-4)|^!(M-6)|^!(M-9)|^!(M-11)","D=T*(28+R)+C*30+(^!T&^!C)*31+D"

TOP

请问一下,set/a "T=^!(M-2)"中的^!是当作逻辑运算异和非在使用,还是用^来将特殊字符转义呢?
寒夜大大可以麻烦解释一下下面这句代码吗,有点看不懂。。。。。
[set/a "T=^!(M-2)","R=(^!(Y%%4)&^!^!(Y%%100))|^!(Y%%400)","C=^!(M-4)|^!(M-6)|^!(M-9)|^!(M-11)","D=T*(28+R)+C*30+(^!T&^!C)*31+D")]

TOP

请问下
set /a r=3^7,r1=3^^7
set r
pause
中的^和^^分别的什么意思?为什么结果是37是4

另外^!^!(Y%%100) 为什么要进行两次逻辑非运算?Y%%100中要为什么要使用两个%?

R=(^!(Y%%4)&^!^!(Y%%100))中的为什么要加上一个&符?

TOP

回复 10楼 的帖子

请问下
^所转义的范围是什么?是只能对数字及字符进行转义吗?比如r=3^7=37,r=-3^-1=-31,但为什么r=3^-1=2呢?是否在set/a后逻辑运算符和位运算符都无法转义吗?

^!(Y%%4)&^!^!(Y%%100))|^!(Y%%400)"
(Y能被4整除)且(Y不被100整除))或(Y能被400整除)
格式都是一样的,为什么中间的Y%%100是Y不被100整除呢?

TOP

可能是小弟太愚钝了,最终还是没有计算出来下面这句的值,求详细计算过程,已2010-05-10号为例
set/a "T=^!(M-2)","R=(^!(Y%%4)&^!^!(Y%%100))|^!(Y%%400)","C=^!(M-4)|^!(M-6)|^!(M-9)|^!(M-11)","D=T*(28+R)+C*30+(^!T&^!C)*31+D")

TOP

返回列表