我在子目录 ( mayor
) 中有一组 mp3 文件,我想使用 ffmpeg 转换每个文件(如下所示:ffmpeg -i <input_file> -ar 44100 -ab 128k -f mp3 <output_file>
),并将结果文件mayor_out
按顺序存储在同级文件夹中。我尝试回答了一些 stackFOR
问题,但没有人解释如何在文件/目录迭代中执行此操作,所以我问了一个新问题。
答案1
好吧,我使用这个.bat脚本成功了(灵感来自这个答案)
@echo off
cd /D mayor
set _num=1
FOR /R %%X IN (*.mp3) DO call :body %%X
goto :eof
:body
ffmpeg -i %1 -ar 44100 -ab 128k -f mp3 ../mayor_out/YAL_m%_num%.mp3
set /a "_num=_num+1"
goto :eof
pause
答案2
以下 Powershell 应该执行您需要的命令,根据需要调整路径:
在“父”目录(例如 C:\parent\)中创建一个名为“ProcessMp3.ps1”的文件,并将以下代码添加到其中。
ForEach($i in Get-ChildItem -filter "*.mp3" -Path "C:\parent" ){ ffmpeg -i $i -ar 44100 -ab 128k -f mp3 ".\sibling\$i" }
在父目录下创建一个名为“sibling”的目录,例如“C:\parent\sibling\”。
在命令提示符中运行:
Powershell ./ProcessMp3.ps1
如果顺序只是意味着在文件名中添加 1、2、3 等作为前缀,那么脚本可能如下所示:
$c=1
ForEach($i in Get-ChildItem -filter "*.mp3" -Path "C:\parent" ){
ffmpeg -i $i -ar 44100 -ab 128k -f mp3 ".\sib\$c-$i"
$c++
}