我提取两个数字并为其添加一个数字。但当最后两位数字为08时,它会抛出上述错误。
set last_two=!file_name:~-2,2!
set /a add_millisec=!last_two!+1
set add_millisec=0!add_millisec!
set add_millisec=!add_millisec:~-2!
有人可以在这里检查并帮助我......
答案 0 :(得分:3)
打开命令提示符窗口并键入set /?
:
[...]数字值是十进制数,除非前缀为0x(十六进制数字),0(八进制数字)。因此,0x12与18相同,与022相同。请注意,八进制表示法可能令人困惑:08和09不是有效数字,因为8和9不是有效的八进制数字。 [...]
您会发现set /A
将前导0
的数字视为八进制数。
要解决此问题,您可以执行以下操作:
使用1
作为前缀,并在计算后再次将其删除:
set last_two=1!file_name:~-2,2!
set /A add_millisec=last_two+1
set add_millisec=!add_millisec:~-2!
为此,您需要提前知道总位数。
在进行任何计算之前删除尾随零,然后根据需要使用前导零填充结果:
set last_two=!file_name:~-2,2!
rem The following line removes all leading zeros:
for /F "tokens=* delims=0" %%Z in ("!last_two!") do set last_two=%%Z
set /A last_two+=0 & rem this avoids `last_two` to be empty if it is `0`
set /A add_millisec=last_two+1
set add_millisec=0!add_millisec!
set add_millisec=!add_millisec:~-2!
或者:
set last_two=!file_name:~-2,2!
rem The following two lines remove all leading zeros:
cmd /C exit !last_two!
set /A last_two=!ErrorLevel!
set /A add_millisec=last_two+1
set add_millisec=0!add_millisec!
set add_millisec=!add_millisec:~-2!
由于您不知道位数,因此此方法更灵活。