用前面的零来增加数字的麻烦。
它在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%
这是因为具有前导零的数字被解释为八进制数字。 8
和9
不是有效的八进制数字。
对于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+1
( 8
)。 (注意,大数字100
必须至少包括与要增加的数值一样多的数字。) var=007
,你可以set var=1%var%
来获得1007
,然后set /A var=(var+1)%%1000
来增加和删除1
,这样就可以得到8
。 注意:以0x
的数字是十六进制数字。