Windows bat 文件用自定义名称重命名多个文件

Windows bat file to rename multiple files with custom names

我有多个文件夹,每个文件夹中都有多个文件。文件名如下: static-string-1.wav static-string-2.wav .... 静态字符串-10.wav ... 静态字符串-99.wav 静态字符串-100.wav ...等等。静态字符串保持不变,但 .wav 之前的数字从 1 变为 999。现在的问题是,如果我想在任何媒体播放器上播放它或想要加入所有文件,windows 将排序为 1,10,100 ,2,20,200 而不是 1,2,3,4,5,6,7,8,9,10 会弄乱播放。所以要解决这个问题,我必须将每个文件从 static-string-1.wav 重命名为 static-string-0001.wav 等等。 目前,我正在对一个输出文件执行一个 dir 命令,然后我将文件列表复制到 excel 中,从那里我做了一些连接和文本到列的操作,并提出了两列旧名称和新名称然后我再次将其转换为 .bat 文件并 运行 它。 bat 文件有多行,其中包含单独的重命名命令,如下所示:


@echo off
rename <oldname1> <newname0001>
rename <oldname2> <newname0002>
.
..
exit

它正在完成工作,但我知道有更简单、更有效的方法来使用 for 循环。我看到的示例和以前的答案很少,但他们没有与我类似的要求。任何帮助将不胜感激。

前导零可以是 added and (later) truncated if not needed. This question is a possible duplicate,但我也不喜欢这样的文件排序方式。

延迟扩展允许 b 在 for 循环内更改,而不是在整个程序中保持静态(哈哈双关语)。因此,您可以在每个循环中递增 b 并重命名文件。这是一个简单的例子:

@echo off
setlocal ENABLEDELAYEDEXPANSION
for /l %%a in (1,1,99) do (
    set b=00%%a
    rename static-string-%%a.wav static-string-!b:~-2!.wav
)

这应该有效。如果您需要更多帮助,请联系我

下面是对

的重大改进
@echo off
setlocal enableDelayedExpansion
for /l %%N in (1 1 99) do (
  set "n=00%%N"
  for %%F in (*-%%N.wav) do ren "%%F" *-!n:~-3!.* || >&2 echo ERROR: Unable to rename "%%F"
)

或者,您可以获取我的 JREPL.BAT regular expression renaming utility 并简单地使用:

jren "-(\d{1,2})(?=\.wav$)" "'-'+lpad(,'000')" /j