Есть несколько способов.
Способ 1:
"C:\Program Files\sox-14-4-0\sox" Sample.wav -n stat | find "Mean amplitude: " > %TMP%\amp.tmp
set /p meanAMP=<%TMP%\amp.tmp
set meanAMP=%meanAMP:*: =%
del %TMP%\amp.tmp
echo %meanAMP%
Способ 2:
for /f "tokens=1-3" %%x in ('"%ProgramFiles%\sox-14-4-0\sox" Sample.wav -n stat') do (
if "%%x %%y"=="Mean amplitude:" set meanAMP=%%z
)
echo %meanAMP%
Самый быстрый:
Способ 3:
for /f "skip=7 tokens=1-3" %%x in ('"%ProgramFiles%\sox-14-4-0\sox" Sample.wav -n stat') do (
if "%%x %%y"=="Mean amplitude:" set meanAMP=%%z
)
echo %meanAMP%
Способ 4:
for /f "tokens=1-3" %%x in ('"%ProgramFiles%\sox-14-4-0\sox" Sample.wav -n stat ^| find "Mean amplitude:"') do (
set meanAMP=%%z
)
echo %meanAMP%
Я подозреваю, что метод 3 будет самым быстрым, потому что:
Метод 1 использует множество шагов, включая внешнюю программу find
, создание, доступ и удаление временного файла и переопределение переменной.
Метод 2 проверяет все выходные данные SOX
.
Метод 4 использует внешнюю программу find
, которая замедляет выполнение.
Метод 3 фактически пропускает первые 7 строк вывода из SOX
, а ЗАТЕМ начинает оценивать вывод.
ПРИМЕЧАНИЕ. Все методы 2–4 можно выполнить в одной строке, просто удалите (
и )
.
EDIT: Исправлены некоторые ошибки в коде.
ПРИМЕЧАНИЕ. Для использования из командной строки метод 1 должен работать как есть. Методы 2-4 требуют замены всех %%
на %
.
Например, вы можете вставить это прямо в cmd
:
for /f "skip=7 tokens=1-3" %%x in ('"%ProgramFiles%\sox-14-4-0\sox" Sample.wav -n stat') do (
if "%x %y"=="Mean amplitude:" set meanAMP=%z
)
echo %meanAMP%
Обратите внимание, что это почти точная копия метода 3, за исключением того, что я изменил %%x
, %%y
и %%z
на %x
, %y
и %z
соответственно.
person
James K
schedule
15.09.2012