通过批处理文件使用前导零增加数字

时间:2015-09-30 20:23:42

标签: windows batch-file cmd

在前面用零增加数字时遇到麻烦。

0008告诉我filename already exist or file not found后失败了。 很奇怪。

这是脚本:

@echo off

copy nul %tmp%\filename.tmp

for /f "tokens=2 delims=-." %%a in (
   'dir /b "%tmp%\filename*.tmp" ^|sort /r ^|findstr /r [0-9]'
) do (
      set "num=%%a"
      goto :done
)

ren %tmp%\filename.tmp  filename-0001.tmp
exit /b 0

:done
echo the highest number found is %num%
set /a num+=1
set incr=0000%num%

ren %tmp%\filename.tmp  filename-%incr:~-4%.tmp

dir /b "%tmp%\filename*.tmp" |sort /r

从而简化了问题:

@echo off

set "num=008"
echo num: %num%
set /a num=num+1
echo num: %num%

echo let's try another syntax
set "num=008"
echo num: %num%
set /a num+=1
echo num: %num%

输出:

num: 008
num: 1
let's try another syntax
num: 008
num: 1

3 个答案:

答案 0 :(得分:3)

另一种方法是添加前面的1(以便它不被解释为八进制),然后递增,然后修剪1。

最大数量受CMD&set / a命令的限制。

@echo off
set "num=008"
echo num: %num%
set "num=1%num%"
echo num: %num%
set /a num=num+1
echo num: %num%
set  num=%num:~1%
echo num: %num%
pause

答案 1 :(得分:2)

我发现的解决方案是在递增之前前面remove zeros

喜欢:

set "num=008"
echo num: %num%

for /f "tokens=* delims=0" %%a in ("%num%") do set num=%%a

set /a num+=1
echo num: %num%

答案 2 :(得分:1)

这是因为带前导零的数字被解释为八进制数。 89不是有效的八进制数字 set /Aif用于数字比较(类型set /?if /?)。

有几种方法可以正确处理这些数字作为十进制值:

  • 要执行数字操作,您需要删除此处another answer中已描述的前导零。
  • 或者,您可以为某些操作添加1;例如,要比较if 1%A% gtr 1%B%,以防%A%%B%包含相同的位数。
  • 另一种选择是添加一个很大的数字加上增量值,然后减去大数字;例如,您需要var=007进行增量,set /A var+=(100+1),然后执行set /A var-=100,以获得var+18)。 (请注意,大数100必须至少包含与要递增的值一样多的数字。)
  • 最后,您可以使用模运算符;例如,您想要增加var=007,您可以set var=1%var%获取1007,然后set /A var=(var+1)%%1000增加并删除1,以便获取8

注意:0x开头的数字是十六进制数字。