いくつかの方法があります。
方法 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 が最も速いと思われます。
find
方法 1 は、外部プログラム、一時ファイルの作成、アクセスと削除、変数の再定義など、多くの手順を使用します。
方法 2 は、 のすべての出力を調べますSOX
。
find
方法 4 は、実行を遅くする外部プログラムを使用します。
方法 3 は、実際には出力の最初の 7 行をスキップしSOX
、THEN は出力の評価を開始します。
注:方法 2 ~ 4 はすべて 1 行で実行できます。(
とを削除するだけ)
です。
編集:コードのいくつかのエラーを修正しました。
注:コマンド プロンプトから使用するには、方法 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
それぞれ変更しました。