对我来说这似乎很简单,而且我相信对大多数人来说也是如此,但我似乎无法理解为什么会发生这种情况。
我所要做的就是使用脚本中的这一小行来查找某个文件夹(由变量 %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
以便它返回到您的脚本。