寻找一种方法在 Windows 上对目录中的所有文件(递归)执行任务

寻找一种方法在 Windows 上对目录中的所有文件(递归)执行任务

我有一个巨大的需要增加音量的 mp4 视频文件数量。我需要一种方法来对指定基目录(以及子目录)中的所有文件执行 ffmpeg 音频过滤器。我的问题是我在 Windows 计算机上工作,并且我不了解它的 shell 语法。

我想做与此 Bash 脚本等效的操作:

TARGET_FILES=$(find /path/to/dir -type f -name *.mp4)
for f in $TARGET_FILES
do
  ffmpeg -i $f -af 'volume=4.0' output.$f
done

今天下午我花了相当多的时间寻找解决方案,但我所需要的递归性质(使用 find 非常简单!)并不太清楚。

任何帮助将不胜感激!

答案1

简而言之,您的脚本将转换为命令提示符的单行代码:

for /r "C:\path\to\file" %f in (*.mp4) do ffmpeg -i %f -af 'volume=4.0' output.%f

解释: for命令循环遍历所有符合特定条件的文件,并在之后执行命令do/r表示递归(即搜索子文件夹);%f是类似于$f脚本中的任意变量。其他部分应该是不言自明的。

答案2

堆栈溢出有一个类似的 PowerShell 脚本,用于使用 ffmpeg 并递归文件夹,但用于更改文件类型。

如果我错了,请纠正我(我不知道 ffmpeg),但是根据那篇文章和你的命令,在 PowerShell 中会给出如下结果:

$oldvids = Get-ChildItem *.mp4 -Recurse
foreach ($oldvid in $oldvids) {
     .\ffmpeg.exe -i $oldvid.FullName -af 'volume=4.0' $oldvid
}

您需要在系统上安装 PowerShell,它是 Windows 8 的内置功能,但可以作为 Windows 以前版本的一部分下载。Windows 管理框架

相关内容