批量用0填充文件名

Padding filenames with 0s in batch

我正在尝试从命令行编辑一些带有填充 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 is off' 和 'The system cannot find the file specified.' 请注意,它确实回显 %%G 所以我不知道发生了什么。我认为这与在循环内有关?但是我无法通过谷歌搜索来解决这个问题。

我的总体问题是:我的方法是否存在明显错误?以及为什么第一段代码的行为符合我的预期,而第二段却不是?

我一个小时前刚学过批处理,到目前为止,这让我很头疼。哈哈

设置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 就可以了。