[英]How to set command output as variable in batch
首先,我一直在谷歌上搜索如何解决此问题,但是没有运气。 我正在制作一个批处理文件,以便使用ffmpeg将文件中的音频重新编码为aac(如果是ac-3或ogg)。 我知道如何用ffmpeg进行转换,但不知道如何仅在音频与特定编解码器匹配时才能自动进行转换。 为了获得文件的音频编解码器,我有两种不同的方法,一种是使用ffprobe,另一种是使用MediaInfo。
MediaInfo --Inform="Audio;%%Format%%" "input.mkv"
要么
ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 "input.mkv"
但是,我的问题是从命令输出中设置变量。 这是我一直在尝试的代码,无济于事。
SETLOCAL
for %%a in (*.mp4) do (
MediaInfo --Inform="Audio;%%Format%%" "%%a">codec.txt
SET /p codec=<codec.txt
DEL codec.txt
ECHO %codec%
)
pause
显然,这只是我目标的一部分,但这是我似乎无法逾越的部分。 我已经通过删除“ DEL codec.txt”部分进行了检查,实际上是在文本文件中存储了正确的输出,但没有将其导入变量中。 无论如何,我都可以将输出设置为变量,这就是我在搜索中经常发现的方式。
任何帮助深表感谢。
for %%a in (*.mp4) do (
for /f "delims=" %%c in (
'MediaInfo --Inform="Audio;%%Format%%" "%%a" ') do (
echo codec is %%c
rem now use "%%c" as codec
)
rem "%%c" is now out-of-scope
)
您需要在SO中搜索delayed expansion
,以解释为什么codec
在代码中保持不变。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.