Batch file Windows bat文件以使用自定义名称重命名多个文件

Batch file Windows bat文件以使用自定义名称重命名多个文件,batch-file,file-rename,batch-rename,Batch File,File Rename,Batch Rename,我有多个文件夹,每个文件夹中有多个文件。文件名如下:static-string-1.wav static-string-2.wav。。。。静态字符串-10.wav。。。static-string-99.wav static-string-100.wav。。。等等静态字符串保持不变,但.wav之前的数字从1更改为999。现在的问题是,如果我想在任何媒体播放器上播放,或者想加入所有文件,windows将排序为1,10100,2,20200,而不是1,2,3,4,5,6,7,8,9,10,这会扰乱播放

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


@echo关闭
改名
改名
.
..
出口

它正在完成工作,但我知道有一种更简单、更有效的方法用于循环。我看到了一些例子和以前的答案,但他们没有像我一样的要求。任何帮助都将不胜感激。

如果不需要,可以使用前导零。这个问题是可能的,但我也不喜欢文件是如何排序的

延迟扩展允许
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的数字才需要修改
  • 脚本自动使用任何静态前缀。有关如何工作的说明,请参见
  • 脚本报告任何无法重命名的文件名
@echo关闭
setlocal enableDelayedExpansion
对于(1 1 99)do中的/l%%N(
设置“n=00%%n”
对于(*-%%N.wav)中的%%F,请执行ren“%%F”*-!N:~-3!。*| |>&2回显错误:无法重命名“%%F”
)
或者,您可以抓住我的,简单地使用:

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

谢谢你这么快的回复。有没有办法使用源文件名而不是使用静态名称?如果bat文件在目录中,post应该可以工作。它接受您拥有的文件并重命名它。这些不是您的文件名吗?静态字符串的意思是该文件夹中的所有文件都将具有相同的前缀名。您如何识别
静态字符串
部分?你试过自己解决你的问题吗?
jren "-(\d{1,2})(?=\.wav$)" "'-'+lpad($1,'000')" /j