本帖最后由 hanyeguxing 于 2011-5-9 23:01 编辑
6# FIR1987
你的代码存在太多的错误...
所有批处理语法中声明为数字或数值的地方,都要求必须是十进制、八进制、十六进制的有效数字,08、09为非法无效
1,tokens= 的值必须是十进制、八进制、十六进制的有效数字
2,yesterday=day-1 运算时,day 必须是十进制、八进制、十六进制的有效数字
3,例如 a=1,那么 set %a%=123 或 set !a!=123 ,实际就是set 1=123
当前日期如果为2011年1月1号,那么昨天该是几号?2011年1月0号?完整的批处理应该是- @echo off
- set/a "D=1%date:~8,2%-101,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)"
- for /f "tokens=%M%" %%a in ("一 二 三 四 五 六 七 八 九 十 十一 十二") do set statdate=%D% %%a月 %Y%
- echo;%statdate%&pause
复制代码 如果要兼容到1900年等,则把
D+=!D*(!(M-2)*(28+!(Y%%4))+K*30+(!!(M-2)&!K)*31)
改成
D+=!D*(!(M-2)*(28+((!(Y%%4)&!!(Y%%100))|!(Y%%400)))+K*30+(!!(M-2)&!K)*31)
全部转换为汉字,则是:- @echo off
- set/a "D=1%date:~8,2%-101,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),M=Y*10000+M*100+D"&set K=〇一二三四五六七八九
- setlocal enabledelayedexpansion
- for /l %%a in (0,1,7) do call set E=!E!%%K:~!M:~%%a,1!,1%%
- set M=%E:~0,4%年%E:~4,1%十%E:~5,1%月%E:~6,1%十%E:~7,1%日&set M=!M:〇十=!&set M=!M:一十=十!&echo !M:十〇=十!&pause
复制代码
|