如何在批处理文件中将month var增加1步?

时间:2012-08-17 14:07:40

标签: date batch-file

我写了一个相当小的批处理文件,为我做了一些日期计算。

但是,我偶然发现了一个小问题:

每当我尝试增加月份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是一个整数),但我真的不知道如何解决这个问题。

1 个答案:

答案 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.