[備忘] 如果在 BAT 批次檔中要多次呼叫另一個 BAT 程式,會發現只執行第一次。正式的寫法應該是用 Call 來執行。
REM "這是錯誤寫法!!"
D:\wmv2mp3.bat 成長傳記 1631
D:\wmv2mp3.bat 商業管理 1621
REM "這是正確寫法!!"
call D:\wmv2mp3.bat 成長傳記 1631
call D:\wmv2mp3.bat 商業管理 1621
C:\Documents and Settings\Jazz>help call
從批次程式中呼叫另一程式。
CALL [drive:][path]filename [batch-parameters]
batch-parameters 指定批次程式所需要的命令列資訊。
如果您啟用擴充命令,CALL 命令的變更如下:
CALL 命令現在可以用標籤來當作 CALL 命令的目標。語法為:
CALL :label arguments
這會用指定的 arguments 來建立一個新的批次檔檔案內容,而且控制權
會被傳到指定的 label 後的敘述。您必須 "exit" 兩次,因為批次檔
的結尾會被執行兩次。第一次您讀入批次檔結尾時,控制權會回到 CALL
描述的下一個敘述。而第二次則會結束批次檔的執行。請鍵入 GOTO /?
來獲得 GOTO :EOF 擴充命令的描述。 這個命令可以讓您從批次檔中
"return" 。
此外,批次檔參數的參考 (%0, %1,
及其他) 已經做了如下的擴充:
%* 在批次檔中,這代表所有的參數 (e.g. %1 %2 %3
%4 %5 ...)
批次參數的取代 (%n) 已經做了改進。 您現在可以
選用下列的語法:
%~1 - 展開 %1 且移除包圍的引號 (")
%~f1 - 展開 %1 為一個完全符合的路徑名稱
%~d1 - 只展開 %1 為磁碟機代號
%~p1 - 只展開 %1 為路徑
%~n1 - 只展開 %1 為檔名
%~x1 - 只展開 %1 為副檔名
%~s1 - 展開的路徑只包含短檔名
%~a1 - 展開 %1 為檔案的檔案屬性
%~t1 - 展開 %1 為檔案的日期/時間
%~z1 - 展開 %1 為檔案的長度
%~$PATH:1 - 搜尋所有列在 PATH 環境變數內的目錄
且展開 %1 為
第一個找到的完全符合檔名。
如果沒有定義環境變數名稱
或是搜尋找不到檔案,
則這個修飾元會展開成
空字串。
修正程式可合併使用,進而得到複合結果:
%~dp1 - 只擴充 %1 到磁碟機代號和路徑
%~nx1 - 只擴充 %1 到檔案名稱和副檔名
%~dp$PATH:1 - 搜尋 %1 的 PATH 環境
變數中所列的目錄,並擴充至
磁碟機代號和第一個找到的路徑。
%~ftza1 - 將 %1 擴充成 DIR ,和輸出行相同
在上例中,%1 和 PATH 可被其他有效值取代。%~ 語法是
以正確的引數數字作結尾。%~ 修正程式可能無法使用 %*