Share via


call

從一個批次程式呼叫另一個批次程式,而不停止父批次程式。 call 命令接受標籤做為呼叫的目標。

注意

當在指令碼或批次檔之外使用時,該呼叫在命令提示字元中沒有任何作用。

語法

call [drive:][path]<filename> [<batchparameters>]] 
call [:<label> [<arguments>]]

參數

參數 描述
[<drive>:][<path>]<filename> 指定您想要呼叫之批次程式的位置和名稱。 <filename> 參數是必要的,而且必須具有 .bat 或 .cmd 副檔名。
<batchparameters> 指定批次程式所需的任何命令列資訊。
:<label> 指定您要批次程式控制項跳至的標籤。
<arguments> 指定要從 :<label> 開始傳遞至批次程式之新執行個體的命令列資訊。
/? 在命令提示字元顯示說明。

批次參數

批次指令碼引數參考 (%0%1...) 列於下表中。

使用批次指令碼中的 %* 值指的是所有引數 (例如 %1%2%3...)。

您可以使用下列選擇性語法作為批次參數 (%n) 的替代:

批次參數 描述
%~1 展開 %1 並移除周圍引號。
%~f1 %1 展開為完整路徑。
%~d1 僅將 %1 展開為磁碟機代號。
%~p1 僅將 %1 展開為路徑。
%~n1 僅將 %1 展開為檔名。
%~x1 僅將 %1 展開為副檔名。
%~s1 %1 展開為只包含簡短名稱的完整路徑。
%~a1 %1 展開為檔案屬性。
%~t1 %1 展開為檔案的日期和時間。
%~z1 %1 展開為檔案的大小。
%~$PATH:1 搜尋 PATH 環境變數中列出的目錄,並將 %1 展開為找到的第一個目錄的完整名稱。 如果未定義環境變數名稱,或搜尋找不到檔案,則此修飾詞會展開為空字串。

下表顯示如何將修飾詞與複合結果的批次參數結合:

含修飾詞的批次參數 描述
%~dp1 僅將 %1 展開為磁碟機代號和路徑。
%~nx1 僅將 %1 展開為檔名和副檔名。
%~dp$PATH:1 搜尋 PATH 環境變數中所列的目錄是否有 %1,然後展開為找到之第一個目錄的磁碟機代號和路徑。
%~ftza1 展開 %1 以顯示類似 dir 命令的輸出。

在上述範例中,%1 和 PATH 可由其他有效值取代。 %~ 語法會以有效的引數編號終止。 %~ 修飾詞不能與 %* 搭配使用。

備註

  • 使用批次參數:

    批次參數可以包含您可以傳遞至批次程式的任何資訊,包括命令列選項、檔名、批次參數 %0%9,以及變數 (例如 %baud%)。

  • 使用 <label> 參數:

    藉由將 call<label> 參數搭配使用,您可以建立新的批次檔內容,並將控制權傳遞至指定的標籤之後的陳述式。 第一次遇到批次檔結尾時 (也就是跳至標籤之後),控制項會在 call 陳述式之後傳回該陳述式。 第二次遇到批次檔結尾時,便會結束批次指令碼。

  • 使用直立線重新導向符號:

    請勿將直立線 (|) 或重新導向符號 (<>) 與 call 搭配使用。

  • 進行遞迴呼叫

    您可以建立呼叫本身的批次程式。 不過,您必須提供結束條件。 否則,父代和子批次程式可能會產生無限迴圈。

  • 使用命令延伸模組

    如果啟用命令延伸模組,call 會接受 <label> 做為呼叫的目標。 正確的語法為 call :<label> <arguments>

範例

若要從一個批次程式執行另一個批次程式,請在父批次程式中輸入下列命令:

call checknew

如果父批次程式接受兩個批次參數,而且您想要將這些參數傳遞至 checknew.bat,請在父批次程式中輸入下列命令:

call checknew %1 %2