
- 批處理指令碼教程
- 批處理指令碼 - 首頁
- 批處理指令碼 - 概述
- 批處理指令碼 - 環境
- 批處理指令碼 - 命令
- 批處理指令碼 - 檔案
- 批處理指令碼 - 語法
- 批處理指令碼 - 變數
- 批處理指令碼 - 註釋
- 批處理指令碼 - 字串
- 批處理指令碼 - 陣列
- 批處理指令碼 - 決策
- 批處理指令碼 - 運算子
- 批處理指令碼 - 日期和時間
- 批處理指令碼 - 輸入/輸出
- 批處理指令碼 - 返回程式碼
- 批處理指令碼 - 函式
- 批處理指令碼 - 程序
- 批處理指令碼 - 別名
- 批處理指令碼 - 裝置
- 批處理指令碼 - 登錄檔
- 批處理指令碼 - 網路
- 批處理指令碼 - 列印
- 批處理指令碼 - 除錯
- 批處理指令碼 - 日誌記錄
- 批處理指令碼資源
- 批處理指令碼 - 快速指南
- 批處理指令碼 - 有用資源
- 批處理指令碼 - 討論
批處理指令碼 - 返回程式碼
預設情況下,命令列執行完成後,應在執行成功時返回零,在執行失敗時返回非零值。當批處理指令碼執行失敗後返回非零值時,非零值將指示錯誤號。然後,我們將使用錯誤號來確定錯誤是什麼,並相應地解決它。
以下是常見的退出程式碼及其描述。
錯誤程式碼 | 描述 |
---|---|
0 | 程式成功完成。 |
1 | 函式不正確。指示Action嘗試在Windows命令提示符cmd.exe中執行未識別的命令。 |
2 | 系統找不到指定的檔案。指示在指定位置找不到該檔案。 |
3 | 系統找不到指定的路徑。指示找不到指定的路徑。 |
5 | 拒絕訪問。指示使用者無權訪問指定的資源。 |
9009 0x2331 |
程式不被識別為內部或外部命令、可操作程式或批處理檔案。指示在配置Action時拼寫錯誤了命令、應用程式名稱或路徑。 |
221225495 0xC0000017 -1073741801 |
可用虛擬記憶體不足。 這表示Windows記憶體不足。 |
3221225786 0xC000013A -1073741510 |
應用程式因CTRL+C而終止。指示應用程式已由使用者的鍵盤輸入CTRL+C或CTRL+Break或關閉命令提示符視窗終止。 |
3221225794 0xC0000142 -1073741502 |
應用程式初始化失敗。指示應用程式已在當前使用者無權訪問的桌面上啟動。另一個可能的原因是gdi32.dll或user32.dll未能初始化。 |
錯誤級別
環境變數%ERRORLEVEL%包含最後執行的程式或指令碼的返回程式碼。
預設情況下,檢查ERRORLEVEL的方法是透過以下程式碼。
語法
IF %ERRORLEVEL% NEQ 0 ( DO_Something )
通常在批處理檔案末尾使用命令EXIT /B %ERRORLEVEL%來返回批處理檔案的錯誤程式碼。
批處理檔案末尾的EXIT /B將停止批處理檔案的執行。
在批處理檔案末尾使用EXIT /B < exitcodes > 返回自定義返回程式碼。
環境變數%ERRORLEVEL%包含批處理檔案中最新的錯誤級別,也就是最後執行的命令的最新錯誤程式碼。在批處理檔案中,最好使用環境變數而不是常量值,因為同一個變數在不同的計算機上會被擴充套件為不同的值。
讓我們來看一個快速示例,說明如何檢查批處理檔案的錯誤程式碼。
示例
假設我們有一個名為Find.cmd的批處理檔案,其中包含以下程式碼。在程式碼中,我們明確指出,如果找不到名為lists.txt的檔案,則應將錯誤級別設定為7。同樣,如果我們看到使用者配置檔案變數未定義,則應將錯誤級別程式碼設定為9。
if not exist c:\lists.txt exit 7 if not defined userprofile exit 9 exit 0
假設我們有另一個名為App.cmd的檔案,它首先呼叫Find.cmd。現在,如果Find.cmd返回一個錯誤,其中它將錯誤級別設定為大於0,則它將退出程式。在下面的批處理檔案中,呼叫Find.cnd find之後,它實際上會檢查錯誤級別是否大於0。
Call Find.cmd if errorlevel gtr 0 exit echo “Successful completion”
輸出
在上述程式中,我們可以有以下場景作為輸出:
如果檔案c:\lists.txt不存在,則控制檯輸出中不會顯示任何內容。
如果變數userprofile不存在,則控制檯輸出中不會顯示任何內容。
如果上述兩個條件都滿足,則字串“成功完成”將顯示在命令提示符中。
迴圈
在決策章節中,我們已經看到語句按順序一個接一個地執行。此外,批處理指令碼中也可以進行實現以改變程式邏輯中的控制流程。然後將其分類為控制流語句。
序號 | 迴圈和描述 |
---|---|
1 | While語句實現
批處理指令碼中沒有直接的while語句,但是我們可以很容易地使用if語句和標籤來實現這個迴圈。 |
2 | For語句 - 列表實現
“FOR”結構為批處理檔案提供了迴圈功能。以下是使用值列表的‘for’語句的常見結構。 |
3 | 遍歷範圍
‘for’語句還可以遍歷一系列值。以下是語句的一般形式。 |
4 | 經典for迴圈實現
以下是大多數程式語言中都提供的經典‘for’語句。 |
遍歷命令列引數
‘for’語句也可用於檢查命令列引數。以下示例顯示瞭如何使用‘for’語句遍歷命令列引數。
示例
@ECHO OFF :Loop IF "%1"=="" GOTO completed FOR %%F IN (%1) DO echo %%F SHIFT GOTO Loop :completed
輸出
假設我們的上述程式碼儲存在一個名為Test.bat的檔案中。如果批處理檔案將1、2和3作為命令列引數傳遞給Test.bat 1 2 3,則上述命令將產生以下輸出。
1 2 3
序號 | 迴圈和描述 |
---|---|
1 | Break語句實現
break語句用於改變任何程式語言中迴圈內的控制流程。break語句通常用於迴圈結構中,用於導致立即終止最內層的封閉迴圈。 |