知道更多思路是好事,实际使用需要根据情况来决定
例如:一天前的日期的获取,要求 %date% 形如2011-01-24 ......- @echo off
- set/a D=1%date:~8,2%%%100-1,M=1%date:~5,2%%%100-!D,Y=%date:~0,4%-!M,M+=!M*12,"K=!(M-4)|!(M-6)|!(M-9)|!(M-11)","D+=!D*(!(M-2)*(28+!(Y%%4))+K*30+(!!(M-2)&!K)*31)"
- set M=0%M%&set D=0%D%
- Echo;%Y%-%M:~-2%-%D:~-2%&pause
复制代码 在这里:
D=1%date:~8,2%%%100-1 当前日期减1
M=1%date:~5,2%%%100-!D 如果D为0,则M减1,否则M不变
Y=%date:~0,4%-!M 如果M为0,则Y减1,否则Y不变
M+=!M*12 如果M为0,则令M为12,否则M不变
"K=!(M-4)|!(M-6)|!(M-9)|!(M-11)" 如果M为4或6或9或11,令K为1,其他时候为0
D+=!D*(!(M-2)*(28+!(Y%%4))+K*30+(!!(M-2)&!K)*31) 这里!D* :如果D为非0,则D不变,如果D为0,则D为(!(M-2)*(28+!(Y%%4))+K*30+(!!(M-2)&!K)*31)
而(!(M-2)*(28+!(Y%%4))+K*30+(!!(M-2)&!K)*31)中,如果M为4或6或9或11,则D为30;如果M为1或3或5或7或8或10或12时,D为31;如果M为2时,若闰年D为29,若非闰年,D为28
在这一个set/a中,完成了大量的if判断
所以楼主的思路放到复杂运算中,效果会很好,但放到非数字的一般字符逻辑中,效果就不明显
[ 本帖最后由 hanyeguxing 于 2011-1-24 17:50 编辑 ] |