1. 程式人生 > >windows批處理中的%errorlevel%與!errorlevel!

windows批處理中的%errorlevel%與!errorlevel!

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!
  )