【发布时间】:2018-04-09 11:52:35
【问题描述】:
我正在尝试设置一个批处理文件(当前在 CMD 提示符下测试)以在目录发生更改时运行。我有一个存储在变量“test”中的命令,它告诉我第一个音频编解码器是什么。如果不是 aa3,我计划用 ffmpeg 重新编码音频。我的第一个问题是,当我尝试使用我的 var 运行一个简单的 if 语句时,我得到一个错误。
set test=ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 "my movie (2017).mkv"
当我运行 %test% 时,它会返回预期的结果。
如果我这样运行:
if %test% == "ac3" echo true
我明白了:
-v was unexpected at this time.
我的最终目标是在将某些内容添加到文件夹时获得类似的内容(还没有去当某些内容发生变化时...可能只是每天运行一次 idk):
set test=ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 "%f"
set outpath=S:\Blu Ray\New folder\"%f"
for %f in (*.mkv) DO
if %test% <> "ac3" (
ffmpeg -i “%f” -vcodec copy -scodec copy -acodec ac3 -b:a 640k “%outpath%";
del "%f";
move "%outpath%" "s:\Blu Ray\")
任何帮助都会很棒
BD
【问题讨论】:
-
您不能像使用 BASH 那样将命令的输出分配给批处理文件中的变量。您也不能将 与 IF 命令一起使用。您可能应该通过打开 cmd 提示符并键入:
if /?来阅读 IF 命令的帮助文件。此外,在进行 IF 比较时,您需要意识到这是一个真正的字符串比较。因此,报价需要在比较的每一侧才能成立。查看您的FOR命令,您可能还想阅读相关帮助。它清楚地表明您需要在批处理文件中使用两个百分比符号。 -
啊好吧。是的,我知道 %%,我说我正在 CMD 提示符下进行测试。谢谢
-
另外,这并不能解释为什么我得到 -v 错误。即使我将 FFprobe 语句放在 if 语句中,我仍然会得到 -v 错误。
-
因为您的变量测试没有引号。所以 if 命令从字面上看到你分配给变量 test 的整个字符串。它将 ffprobe 之后的空格视为必须比较的字符串的结尾。它尝试读取 -v 作为比较运算符。
-
我以“%test%”的身份完成了它并得到了同样的结果。
标签: batch-file cmd ffmpeg ffprobe