我写了一个相当小的批处理文件,为我做了一些日期计算。
但是,我偶然发现了一个小问题:
每当我尝试增加月份var时,它只是将var设置为所需的增量。代码:
: How much time should we add? Default is 1 month
SET timeadd=1
: Set the date variables to build needed format
SET YYYY=%date:~-4%
SET MM=%date:~3,2%
SET DD=%date:~0,2%
if not %MM%==12 (
SET /A MM=MM+timeadd
SET changed=1
)
声明后,今天(8月17日)的月份变量为“08”。
然后在if块之后,此var将更改为“1”。
我可以猜测这是一个转换问题(日期是一个字符串,timeadd是一个整数),但我真的不知道如何解决这个问题。
答案 0 :(得分:1)
如评论中所述,这是因为前导0
表示八进制表示法(就像前导0x
表示十六进制表示法),但是八进制编号系统从01到07运行,所以没有八进制08或09,而是010和011。
十进制值8 ==八进制值010
十进制值9 ==八进制值011
要自己验证,请在命令提示符下输入
c:\>set /a 010
c:\>set /a 011
您的输出将是:
8
9
=======================================
我的解决方案就是检查任何前导0
并删除它们。
if "%MM:~0,1%"=="0" set MM=%MM:~-1%
我需要做任何数学魔术......
set /a MM=%MM% + 1
...然后在必要时重新添加前导0
。
set MM=0%MM%
set MM=%MM:~-2%
请记住确保它不超过12(在这种情况下)或低于1.