用前面的零来增加数字的麻烦。
它在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
从而简化了这个问题:
如何使用Windows批处理命令删除“没有扩展名的文件”的所有内容
如果不成功则暂停命令而不是自动closures
Windows批处理脚本使用7ziprecursion提取特定文件
Windows批处理脚本url解码
@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
如何忽略一个URL中的&符号来replace批处理脚本中的string?
批处理游戏中的碰撞检测无法正常工作
杀死在后台运行的批处理
使用批处理脚本进行stringparsing
另一种方法是添加一个前面的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的数字是十六进制数字。