[英]batch file: assign decimal value to variable
該腳本從OGG文件的目錄中運行。
cd c:\dirWithOGG
for %%f in (*.ogg) do (
sox %%f %%f pad 0 "soxi -D %%f"
sox %%f %%f repeat 10
)
第一次必須創建批處理腳本時,我認為這很容易。
soxi -D %%f
上面的代碼獨自返回一個十進制值。 由於某種原因,它不是在腳本中執行的。 sox和soxi在添加到PATH的位置。
任何幫助表示贊賞,謝謝。
如果要使用soxi -D %%f
的輸出作為sox
的命令行參數,請按以下步驟操作:
FOR %%f IN (*.ogg) DO CALL :runsox "%%f"
GOTO :EOF
:runsox
soxi -D %1>tmpfile
SET /P decvalue=<tmpfile
sox %1 %1 pad 0 %decvalue%
sox %1 %1 repeat 10
如您所見,循環中的命令已移至循環正在調用的子例程。 除此之外, soxi
的輸出將重定向到一個文件,然后將其讀取到一個變量中,該變量又用於將該值傳遞給sox
。
實際上是由於變量的緣故,我不得不將命令移到循環外。 除非啟用了延遲擴展並且使用了不同的語法來處理變量,否則它在循環內將無法正常工作。 不過,我更喜歡如上所述實現。
如果我沒記錯的話, for
要求在同一行上指定操作。 請嘗試以下操作:
for %%f in (*.ogg) do sox %%f %%f pad 0 "soxi -D %%f" && sox %%f %%f repeat 10
嘗試在您的頭(或紙上)上展開FOR
:
FOR %%F IN (*.ogg) DO (
sox %%F %%F pad 0 "soxi -D %%F"
sox %%F %%F repeat 10
)
如果您有一個.ogg
文件,例如foo.ogg
,則FOR
循環將導致執行以下兩個語句。
sox foo.ogg foo.ogg pad 0 "soxi -D foo.ogg"
sox foo.ogg foo.ogg repeat 10
我認為第一行不會做您期望的事情。 它將運行sox
,並將行的其余部分作為參數傳遞。 它不會執行soxi -D foo.ogg
並將其替換為輸出。 DOS根本無法通過這種方式工作。 嘗試類似:
SETLOCAL EnableExtensions
FOR %%F IN (*.ogg) DO (
FOR /F %%N IN ('soxi -D %%F') DO (
sox %%F %%F pad 0 "%%N"
sox %%F %%F repeat 10
)
)
ENDLOCAL
那可能行得通。 我無權訪問DOS框,因此內部FOR
語法可能錯誤。 您可能必須用反引號或雙引號指定子命令。 增強版的FOR
循環需要啟用IIRC的命令擴展。 嘗試輸入FOR /?
在命令提示符下,或閱讀http://www.computerhope.com/forhlp.htm以獲取更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.