如何批量设置命令输出为变量
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
在您的代码中保持不变。
首先,我在谷歌上搜索了又搜索如何解决这个问题,但没有成功。我正在制作一个批处理文件,以使用 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
在您的代码中保持不变。