首页 > 解决方案 > 如何在长 PowerShell 命令中使用变量而不破坏命令

问题描述

我想使用 ffmpeg 将 .m4a 文件转换为 .mp3 文件。

我可以为每个文件都这样做,但这需要花费很多精力才能输入。

ffmpeg -i '.\song.m4a' -ac 2 -b:a 192k '.\song.mp3'

有没有办法使用powershell使用变量来做到这一点?前任:

ffmpeg -i $v -ac 2 -b:a 192k $v.mp3

这样做的问题是,该-ac标志被视为路径的一部分,而不是 ffmpeg 的一部分。

在powershell中有没有办法解决这个问题?
或者这可以用数组来完成吗?如果我$v=Get-ChildItem -Name在 ffmpeg 命令中使用 foreach 循环并在数组上进行迭代。

我对 PowerShell 很陌生,没有很多经验,但在我看来应该可以做到。

我会很感激我能得到的任何帮助。

标签: windowspowershellffmpeg

解决方案


如果你只是这样做,除非你用替换语句等来处理它,否则你Get-Childitem -Name最终会得到song.m4a.mp3。如果你把它作为一个对象,那么你可以引用名称,然后再引用基本名称。

get-childitem -Filter *.m4a |
    foreach {ffmpeg -i “$($_.name)“ -ac 2 -b:a 192k “$($_.basename).mp3”}

我没有对此进行测试,因此您可能需要调整报价。


推荐阅读