我正在尝试在cmd中运行for
循环,如下所示:
for %f in (*.mp4) do (
set outfile=%f:mp4=mp3%
ffmpeg -i %f -vn -ar 44100 -ac 1 -b:a 32k -f mp3 %outfile%
)
该脚本应该获取所有* .mp4文件,对它们运行ffmpeg命令,然后将生成的文件命名为mp4,只将扩展名更改为* .mp3。
它不起作用。输出字面上命名为%outfile%
。如果我不得不猜测,初始化或调用outfile
变量有问题。我也认为这可能是一个数据类型问题。 %f
可能是指针,而不是字符串,因此需要进行某种字符串提取或类型转换。
如何在cmd中设置和使用文件名作为字符串变量?
答案 0 :(得分:2)
最好的方法就是不要这样做。不要在变量中存储可以直接从for
可替换参数中检索的变量。
for %f in (*.mp4) do ffmpeg -i "%f" -vn -ar 44100 -ac 1 -b:a 32k -f mp3 "%~nf.mp3"
for
命令可替换参数(在您的情况下为%f
)允许使用一些修饰符(请参阅for /?
)。 %~nf
是%f
但是,如果你唯一的选择是here,你可以找到一些方法来处理这个问题。