在前面用零增加数字时遇到麻烦。
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
答案 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)
这是因为带前导零的数字被解释为八进制数。 8
和9
不是有效的八进制数字
set /A
和if
用于数字比较(类型set /?
和if /?
)。
有几种方法可以正确处理这些数字作为十进制值:
1
;例如,要比较if 1%A% gtr 1%B%
,以防%A%
和%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
开头的数字是十六进制数字。