繁体   English   中英

如何批量设置命令输出为变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM