重命名脚本会覆盖文件名的一部分,而不是将其添加到文件名前面

重命名脚本会覆盖文件名的一部分,而不是将其添加到文件名前面

对我来说这似乎很简单,而且我相信对大多数人来说也是如此,但我似乎无法理解为什么会发生这种情况。

我所要做的就是使用脚本中的这一小行来查找某个文件夹(由变量 %folder2%)中的 .png 文件,并在它们前面加上“DONE-”。它确实在这样做,但是,它会用我想要的前缀 (DONE-) 覆盖文件名的前五个字符。以下是代码行:

对于 (PNG) 中的 %%a,执行(重命名“%folder2%*.%%a” “DONE-*.%%a”)

我希望你们中的一些人可以对此作出一些解释。

答案1

仅使用命令无法实现您想要的功能RENAME- 当您使用通配符时,它根本没有将值添加到现有名称的机制。目标名称中的任何字符都将替换源名称中的字符,直到第一个.

我不能责怪你不理解,因为 Windows 文档对这个命令的描述很糟糕。我从来没有看到任何描述规则的文字。这就是为什么我调查并写下Windows RENAME 命令如何解释通配符?

将文本添加到现有名称的批处理解决方案是使用 FOR 循环单独重命名每个文件。类似下面的方法应该适合您。

for %%F in ("%folder2%*.PNG") do rename "%%F" "DONE-%%~F"

另一个选择是使用比本机命令更强大的第三方实用程序RENAME。如果你熟悉正则表达式,那么一个选择是我的JREN.BAT 重命名实用程序。它是纯脚本(混合 JScript/批处理),可在 XP 及以上版本的任何 Windows 机器上本地运行 - 无需第三方 exe 文件。一旦您拥有副本,就可以通过命令行获取帮助jren /?,或jren /??获取分页帮助。

使用 JREN.BAT,解决方案非常简单jren "^" "DONE-" /p "%folder2%" /fm *.png。如果您将命令放在需要使用的批处理脚本中,call jren以便它返回到您的脚本。

相关内容