|
你分享的这个不过是简单的数学计算,仔细研究研究,好多人都能写,只要数学不太差。
看看下面这个,昨天日期计算,不知道是哪位大神写的,数学学得真好,set运用的出神入化。
- @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
复制代码
用到的部分计算:
set /a !0 ::结果:1
set /a !1 ::结果:0
!意思是一元运算,简单的说,就是!非0值为0,!0值为1。
!(M-4),当M=4时,!(M-4)=1,否则等于0。
set /a "0|1" ::结果:1
set /a "0|0" ::结果:0
set /a "1|1" ::结果:1
|意思是或运算,简单的说,就是同时为0时才为0,否则为1。
"K=!(M-4)|!(M-6)|!(M-9)|!(M-11)",由于4、6、9、11月都是30天,这个用于判断是不是其中某月,替代了IF判断。
假设当前6月:
"K=!(6-4)|!(6-6)|!(6-9)|!(6-11)"
"K=!(2)|!(0)|!(-3)|!(-5)"
"K=0|1|0|0"
"K=1"
set /a "0&1" ::结果:0
set /a "0&0" ::结果:0
set /a "1&1" ::结果:1
&意思是与运算,简单的说,就是同时为1时才为1,否则为0。
"(!!(M-2)&!K)*31"
仍然以6月为例:
"(!!(6-2)&!1)*31"
"(!!4&0)*31"
"(!0&0)*31"
"(1&0)*31"
"0*31"
结果:0
感兴趣的可以自己研究计算方法,不过我估计过一段时间你就会忘记的,即使你研究的滚瓜烂熟。 |
|