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
)
这应该有效。如果您需要更多帮助,请联系我
下面是对
的重大改进
- 只有小于100的数字需要修改
- 该脚本自动使用任何静态前缀。有关其工作原理的说明,请参阅 How does the Windows RENAME command interpret wildcards?。
- 脚本报告任何无法重命名的文件名
@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
我有多个文件夹,每个文件夹中都有多个文件。文件名如下: 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
)
这应该有效。如果您需要更多帮助,请联系我
下面是对
- 只有小于100的数字需要修改
- 该脚本自动使用任何静态前缀。有关其工作原理的说明,请参阅 How does the Windows RENAME command interpret wildcards?。
- 脚本报告任何无法重命名的文件名
@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