2016-12-05 162 views
0

首先,我使用Google搜索并搜索了如何解决此问题,但没有运气。我正在制作一个批处理文件,以将文件中的音频重新编码为aac(如果是ac-3或使用ffmpeg的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”部分来检查,实际上是将正确的输出存储在文本文件中,但不会将其导入到变量中。无论如何,我可以设置输出到一个变量是好的,这只是我经常在我的搜索中找到的方式。

任何帮助,非常感谢。

+2

可能重复[windows批处理命令为循环集环境变量](http://stackoverflow.com/questions/17598638/windows-batch-command-for-loop-set-environment-variable) –

+0

可能重复的[批处理 - 分配命令输出到变量](http://stackoverflow.com/questions/16203629/batch-assign-command-output-to-variable);也相关:[批处理 - 分配命令输出与变量变量](http://stackoverflow.com/questions/28663803/batch-assign-command-output-with-variables-to-variable) – aschipfl

回答

1
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 
) 

你需要为delayed expansion SO寻找生命codec留在你的代码保持不变的解释。

+0

非常感谢,这工作稍作修改。我必须在等号之前加上一个插入符号,因为它不会将其作为命令的一部分。 – Crankrune

相关问题