windows批處理中的%errorlevel%與!errorlevel!
阿新 • • 發佈:2019-01-25
bat指令碼中常用%errorlevel%表達上一條命令的返回值,用於判斷。比如:
cmd1
if %errorlevel% == 1 (
cmd2
) //如果cmd1返回的錯誤碼值等於1時,將執行cmd2操作
一般上一條命令的執行結果返回的值只有兩個,0表示”成功”、1表示”失敗”,實際上,errorlevel 返回值可以在0~255 之間。
在for迴圈中或if語句中多條命令都需要獲取返回值等情況下,用errorlevel顯得無效,第二條命令開始errorlevel的值都不會變。此處涉及批處理中的變數延遲問題,並不是errorlevel無效,而是對errorlevel變數的引用採用的是沒開啟變數延遲情況下的百分號%。
開啟變數延遲的設定:setlocal EnableDelayedExpansion,即延遲環境變數擴充套件,告訴直譯器在遇到複合語句的時候,不要將其作為一條語句同時處理,而是一條一條地去解釋。但是這時如果仍然用百分號%來引用變數是不起作用的,必須用感嘆號!,如!errorlevel!。
setlocal enabledelayedexpansion
cmd1
if !errorlevel! == 1 (
cmd2
echo !errorlevel!
)