Как установить вывод команды как переменную в пакетном режиме

Во-первых, я гуглил и гуглил, как решить эту проблему, но безуспешно. Я работаю над созданием пакетного файла для перекодирования звука в файле в aac, если это ac-3 или ogg с использованием ffmpeg. Я знаю, как сделать преобразование с помощью ffmpeg, но не знаю, как его автоматизировать, только если звук соответствует определенному кодеку. Чтобы получить аудиокодек для файла, у меня есть два разных метода: один с ffprobe, а другой с MediaInfo.

MediaInfo --Inform="Audio;%%Format%%" "input.mkv"

or

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», которая фактически сохраняет правильный вывод в текстовом файле, но не импортирует его в переменную. В любом случае, я могу установить вывод в переменную, это нормально, именно так я часто находил в своем поиске.

Любая помощь горячо приветствуется.


person Crankrune    schedule 05.12.2016    source источник


Ответы (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
)

Вам нужно будет искать SO для delayed expansion для объяснения того, почему codec остался неизменным в вашем коде.

person Magoo    schedule 05.12.2016
comment
Спасибо большое, с небольшой доработкой все получилось. Мне пришлось добавить знак вставки перед знаком равенства, так как он не передавался как часть команды. - person Crankrune; 06.12.2016