0

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

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

每当我尝试增加月份 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
)

声明后,月份 var 今天(8 月 17 日)将是“08”。

然而,在 if 块之后,这个 var 将变为“1”。

我可以猜测这是一个转换问题(日期是一个字符串,时间加是一个整数),但是我真的不知道如何解决这个问题。

4

1 回答 1

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。

于 2012-08-29T15:45:53.743 回答