批量填充0的文件名

时间:2015-07-21 23:46:26

标签: batch-file batch-rename

我正在尝试使用命令行中的填充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,所以我不知道发生了什么。我认为它与循环内部有关?但我无法用谷歌搜索来解决这个问题。

我的总体问题是:我的方法有明显的错误吗?为什么第一块代码的行为与我期望的一样,但不是第二块?

我刚刚在一小时前学会了批次,到目前为止它让我很头疼。哈哈。

1 个答案:

答案 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可以正常工作。