簡體   English   中英

批處理文件:為變量分配十進制值

[英]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

上面的代碼獨自返回一個十進制值。 由於某種原因,它不是在腳本中執行的。 soxsoxi在添加到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM