【问题标题】:Mass renaming in batchfile: skip specific files by name批量重命名批处理文件:按名称跳过特定文件
【发布时间】:2015-04-13 14:30:17
【问题描述】:
我想要一个用于重命名文件的批处理脚本。它应该从目录中工作并检查子文件夹中的所有文件并重命名文件。
forfiles -p "." -s -m . -c "cmd /c ren @file @file.mp3"
但是多次使用 .bat 会使事情变得复杂。我得到 .mp3.mp3 文件并将我的 .bat 重命名为 .bat.mp3 (关闭诅咒......)。
对于我来说,如何跳过具有特定文件结尾的文件 .mp3 和 .bat?
我确信有一个优雅的解决方案。
【问题讨论】:
标签:
windows
batch-file
cmd
【解决方案1】:
要阻止批处理文件重命名,您可以将它放在要重命名文件位置的“上一个目录”。当您运行 forfiles 命令时,将 /p 参数传递为“./name_of_folder”并将 /s 用于子文件夹。
forfiles 命令没有排除文件的参数。 /m 参数将包含基于扩展名的文件,因此如果您传递像 /m "*.zip" 这样的 ext 名称,它只会重命名 zip 文件,而不再重命名批处理文件。
如果您真的想根据扩展名排除某些文件,您将不得不做一些更有趣的事情,可能包含多个批处理文件或 goto 语句。你不会使用 forfiles。您将运行一个命令来输出您想要的文件的名称,然后对这些文件中的每一个运行一个操作。像
for /f %%a in ('dir /b *') do @if "%%~xa" neq ".mp3" echo %%a
【解决方案2】:
使用JREN.BAT 非常简单——这是一个混合的 JScript/批处理实用程序,可以通过正则表达式批量重命名文件。 JREN.BAT 是纯脚本,可以在 XP 以后的任何 Windows 机器上本地运行。
假设 JREN.BAT 在您的 PATH 中的某个位置,那么以下简单的一行代码可以直接从命令行运行 - 不需要批处理脚本(除了 JREN.BAT 实用程序本身)
jren $ .mp3 /s /fx "*.mp3|*.bat"
完整的文档内置在脚本中,可以通过jren /? 或jren /?|more 从命令行访问,如果您想一次只查看一页。