在命令提示符的循环中动态命名文件

在命令提示符的循环中动态命名文件

我有一个批处理脚本,它使用 for 循环遍历当前目录中的文件,然后使用 ffmpeg 将它们转换为 mp4 并放入父目录中。基本上,我只需将所有要转换的文件复制到名为“avi”的目录(子目录)并运行 .bat 脚本即可。问题是,我在父目录中有相当多的文件。当我创建新的 avi 文件时,它们被命名为“capture-#.avi”,其中 # 是一个从 1 开始的数字。转换后的文件使用相同的命名方案,但它是连续的。每次我创建一组新的 avi 文件时,# 都会从 1 开始,因此当我将它们复制到 avi 目录并运行批处理脚本时,它会尝试覆盖父目录中现有的 mp4 文件。有没有办法让批处理脚本从父目录中获取最新的(最高捕获编号)文件名并使用它来动态命名输出文件,这样 avi 文件的名称是什么就无关紧要了,当它转换时它会显示为“capture-#.mp4”,数字从父目录中现有的数字继续?

例如,在父目录中,我有 30 个文件,其中最新的显然是“capture-30.mp4”。我将两个 avi 文件复制到 avi 目录中,分别名为“capture-1.avi”和“capture-2.avi”,我可以让批处理脚本在父目录中查找并看到 capture-30.mp4 文件,并自动将 avi 文件(在转换时)重命名为 capture-31.mp4 和 capture-32.mp4 吗?

我尝试这样做:

for %I in (../*.mp4) do SET _file=%I

但是 _file 变量被设置为 capture_9.mp4,大概是因为排序系统不是自然排序,所以它认为 9 大于 30(因为 9 > 3)。我尝试将整个 for 循环括在括号中并在末尾添加 | sort,但没有任何变化。

答案1

我会使用一些缓存文件来保存最后转换的数字。运行脚本时读取此数字并将其用作索引。在循环中,您还应该检查父目录中的文件名是否存在。如果存在,请尝试将计数器加 1。完成循环后,将索引保存到文件中以供日后使用。

相关内容