如何在 cmd 命令行中设置和使用文件名字符串变量?

How to set and use filename string variables in cmd command line?

我正在尝试 运行 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 中设置和使用文件名作为字符串变量?

最好的办法就是不去做。不要在变量中存储可以直接从 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您可以找到一些方法来解决这个问题。