我正在尝试使用命令行中的填充0编辑一些文件名。我想让T9成为T009。
我试过了:
@echo off
set num=99
set newnum=000%num%
set newnum=%newnum:~-4%
rename "T%num%.bmp" "T%newnum%.bmp"
pause
确实将文件t99.bmp更改为T0099.bmp,正如我预期的那样。但是,当我尝试循环时:
@echo off
FOR /L %%G IN (1,1,100) DO (
set num=%%G
echo %%G
set newnum=0000%num%
set newnum=%newnum:~-4%
echo %newnum%
ren "T%num%.bmp" "T%newnum%.bmp"
)
pause
它告诉我“ECHO已关闭”和“系统无法找到指定的文件”。注意,它会回复%% G,所以我不知道发生了什么。我认为它与循环内部有关?但我无法用谷歌搜索来解决这个问题。
我的总体问题是:我的方法有明显的错误吗?为什么第一块代码的行为与我期望的一样,但不是第二块?
我刚刚在一小时前学会了批次,到目前为止它让我很头疼。哈哈。
答案 0 :(得分:1)
设置EnableDelayedExpansion
,然后使用!var!
代替%var%
固定代码:
@echo off
setlocal EnableDelayedExpansion
FOR /L %%G IN (1,1,100) DO (
set num=%%G
echo !num!
set newnum=0000!num!
set newnum=!newnum:~-4!
echo !newnum!
ren "T%%G.bmp" "T!newnum!.bmp"
)
pause
endlocal
如果您尝试回显的变量为空,则会出现 ECHO IS OFF
。
对于找不到文件的部分,这仅表示找不到您尝试处理的文件。确保.bat
文件与.bmp
图片位于同一文件夹中。如果没有,请将其移至那里或cd前往路径。
要详细了解EnableDelayedExpansion,请click here
另外,为了让您知道,设置num
变量是不必要的,set newnum=0000%%G
可以正常工作。