HOWTO · Batch

批處理指令碼中的 PAUSE 關鍵字

本教程將展示在批處理指令碼中使用 PAUSE 關鍵字。

本頁內容

Windows 批次檔執行完畢後,命令視窗可能隨即關閉,讓你來不及讀取結果。若要讓指令碼在特定位置等待按鍵,請使用 PAUSE;若希望指令碼結束後命令視窗仍保持開啟,則可用 CMD /K 啟動。兩者的行為不同:前者會暫停指令碼的執行,後者則會讓命令工作階段繼續保持可用。

了解 PAUSE 命令

在 Windows CMD 中,PAUSE 會顯示標準的「Press any key to continue . . .」提示,並等待按鍵。按下一般按鍵後,批次檔會執行下一個命令。Ctrl+C 或 Ctrl+Break 則可能中斷批次檔,並觸發終止處理,而非讓它直接繼續。例如,指令碼可以先印出結果,等使用者閱讀後,再印出結尾文字。命令依序為 @echo off、echo Report finished.、pause 和 echo The script continues here.。

如果某個步驟的輸出需要由使用者查看,在該步驟後加入命令列 pause 會很實用。但它不會確認使用者是否同意某個選擇:按下任何一般按鍵都會讓指令碼繼續,Ctrl+C 或 Ctrl+Break 則可能中斷執行並觸發終止處理。不要把它當成刪除檔案或變更系統設定前的安全確認。若指令碼會在沒有互動式使用者的情況下執行,也應避免使用 PAUSE,因為它會一直等待鍵盤輸入。

本文範例展示 Windows CMD 語法,撰寫期間並未實際執行。以雙擊方式執行的批次檔可能會在命令結束後關閉,因此在指令碼中加入暫停,可讓視窗保持顯示,直到有人按下按鍵。

在 PAUSE 前顯示自訂訊息

PAUSE 的提示文字是固定的,無法接受自訂提示內容。若要提供說明,請先用 echo 顯示另一則訊息,再用 pause >nul 隱藏 PAUSE 的固定提示。例如,先使用 echo Review the report above, then press a key to continue.,接著使用 pause >nul。

echo 命令會顯示自訂文字;>nul 則會重新導向 PAUSE 的輸出,讓標準提示不會顯示。當訊息需要說明使用者應閱讀什麼,或指令碼接下來會做什麼時,這種寫法很有用。請確保指示內容準確:按下按鍵只會讓批次檔繼續執行,不代表使用者已核准某項操作。

如果標準提示有用,就省略 >nul,直接使用 pause。無論採用哪種寫法,都應將暫停放在使用者需要查看的資訊之後,以及需要等待的命令之前。

使用 CMD /K 保持命令視窗開啟

如果希望批次檔執行完畢後命令視窗仍保持開啟,請使用 CMD /K。例如,從「執行」對話方塊或其他命令啟動工具輸入 cmd /k ""C:\Scripts\report.bat"",並將路徑替換為 .bat 檔案的位置。CMD 處理 /K 命令字串時會移除最外層的一對引號,讓批次檔路徑保留引號;如此一來,即使路徑包含空格,也會被視為單一命令名稱。CMD /K 會執行命令,之後讓命令直譯器保持開啟,方便你查看輸出或輸入其他命令。

這個選項不會在批次檔中加入暫停。指令碼會一路執行各個命令,不會在特定一行等待;命令完成後,命令視窗仍可繼續使用。此範例採用 Windows CMD 語法,撰寫期間並未實際執行。

為批次指令碼選擇合適的方法

如果你希望使用者在執行下一行之前,先閱讀特定位置的訊息或結果,請選用 PAUSE。暫停前先印出簡短說明,讓使用者知道等待的原因。如果自己的 echo 文字已足夠,就使用 pause >nul;如果標準提示也有幫助,則直接使用 pause。例行的無人值守工作不應加入多餘的暫停,因為可能沒有人能按下按鍵。

如果主要目的是在批次檔結束後保持命令視窗開啟,請選用 CMD /K。從命令啟動工具執行指令碼後查看最終輸出時,這種方式通常很方便。它不會為了等待使用者回應而停止指令碼,也不會將按鍵轉變為確認操作。

這兩種方法都適用於在 CMD 中執行的 Windows 批次檔。它們都不會回報先前的操作是否成功;若指令碼需要依成功或失敗結果做出判斷,請另外檢查命令的結果。需要使用者閱讀資訊時,請在指令碼中設置明確的檢查點;需要讓命令工作階段保持開啟以便查看輸出或輸入命令時,則使用 CMD /K。