0

我为用于 mux mkv 文件的 Windows 创建了一个批处理脚本。启动此命令时:

ffprobe -v 0 -select_streams s -show_entries stream=index:disposition=default -of compact=nk=0 file.mkv | findstr disposition:default=1

输出是:

stream|index=3|disposition:default=1

如何仅过滤和打印数字“3”并将其放入变量中?

4

2 回答 2

0

批处理文件方法

您需要在for批处理文件内的语句中执行命令,以便能够捕获输出行并进一步处理它们。检查for /?命令行和部分for /f并了解“usebackq”。
关键是,如果在 for 语句中执行而不是直接在命令行提示符下执行,则需要从命令中转义几个特殊字符。
如果您愿意,请尝试让这部分工作并将您的解决方案发布为您的答案的更新。然后我们可以进入提取数字的第二部分。

于 2020-05-01T06:30:33.487 回答
0

我提交了一个简化输出的新命令:

ffprobe -v 0 -select_streams s -show_entries stream=index:disposition=forced:stream_tags=language -of csv=nk=1:p=0 file.mkv | FINDSTR /C:"1,ita"

输出是:

3,1,ita

“3”是track id,“1”是强制标志,“ita”是track language。要创建一个仅包含要插入到 mkvmerge 命令中的轨道 ID(例如 3)的变量,我运行了以下命令:

FOR /F "delims=, tokens=1" %%# IN ('ffprobe -v 0 -select_streams s -show_entries stream=index:disposition=forced:stream_tags=language -of csv=nk=1:p=0 file.mkv ^| FINDSTR /C:"1,ita"') DO SET subid=%%#

但是什么也没有发生!mkvmerge 报这个错误: 错误:Invalid track ID or language code in '-s '.

我真的不知道错在哪里!

于 2020-05-01T08:04:04.023 回答