我有多个文件夹,每个文件夹中都有多个文件。文件名如下: 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
它已经完成了工作,但我知道有更简单,更有效的方法来使用循环。我看到了一些示例和之前的答案,但他们没有像我一样的要求。任何帮助将不胜感激。
答案 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)
@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