2016-12-05 161 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

相關問題