使用自定义名称

时间:2016-07-17 00:56:22

标签: batch-file file-rename batch-rename

我有多个文件夹,每个文件夹中都有多个文件。文件名如下: static-string -1.wav static-string -2.wav .... static-string - 10.wav ... static-string -99.wav static-string -100.wav ...等等。静态字符串保持不变但.wav之前的数字从1 - 999变化。现在问题是如果我想在任何媒体播放器上播放或想要加入所有文件,窗口将排序为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

它已经完成了工作,但我知道有更简单,更有效的方法来使用循环。我看到了一些示例和之前的答案,但他们没有像我一样的要求。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

如果不需要,前导零可以是added and (later) truncated。这个问题可能是duplicate,但我不喜欢文件的排序方式。

延迟扩展允许{for循环中的b更改,而不是整个程序中的静态(哈哈双关语)。因此,您可以增加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
)

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

答案 1 :(得分:0)

以下是Clayton's answer

的重大改进
@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($1,'000')" /j