在批处理脚本中过滤字符串中的单词

问题描述 投票:0回答:2

我为用于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”并将其放入变量中?

batch-processing ffprobe mkv mediamuxer muxer
2个回答
0
投票

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


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”是轨道ID,“ 1”是强制标志,“ ita”是轨道语言。要创建仅包含要在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 '.

我真的不知道错误在哪里!

© www.soinside.com 2019 - 2024. All rights reserved.