用batch file增加前导零的数字

用前面的零来增加数字的麻烦。

它在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 

另一种方法是添加一个前面的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 

我找到的解决方案是在增加前删除前面的零 。

喜欢:

 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% 

这是因为具有前导零的数字被解释为八进制数字。 89不是有效的八进制数字。
对于set /A和对于数字比较(类型set /?if /? ),这是正确的。

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

  • 要进行数字操作,您需要删除前面的另一个答案中所述的前导零。
  • 或者,你可以在某些操作前添加1 ; 比如, if 1%A% gtr 1%B% %A%%B%包含相同的位数,则比较if 1%A% gtr 1%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的数字是十六进制数字。