批處理指令碼 - 返回程式碼



預設情況下,命令列執行完成後,應在執行成功時返回零,在執行失敗時返回非零值。當批處理指令碼執行失敗後返回非零值時,非零值將指示錯誤號。然後,我們將使用錯誤號來確定錯誤是什麼,並相應地解決它。

以下是常見的退出程式碼及其描述。

錯誤程式碼 描述
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語句通常用於迴圈結構中,用於導致立即終止最內層的封閉迴圈。

廣告