2010-08-11 86 views
3

由於ERRORLEVEL是一個環境變量,在我有機會在我的批處理文件中檢查它之前,它的值是否可以更改?ERRORLEVEL是可靠的嗎?

+2

%ERRORLEVEL%** ** IS可靠,爲大家誰扮演通過它的規則。在這場比賽中,誰的確經常是不可靠的,通常是用戶沒有按照規則玩牌......(我並不責怪用戶 - 微軟在這裏設置的規則非常模糊。) – 2010-08-11 17:45:21

回答

2

環境變量屬於當前的「過程」,因此它們不能從外部改變。如果您在批處理文件中檢查相關命令後的錯誤級別,則應該檢查正確的值。

您可以通過打開兩個命令窗口,並進入第一證實了這一點:

c:> set errorlevel=7 

然後第二:

c:> set errorlevel=9 

然後返回到第一和:

c:> echo %errorlevel% 
7 

您應該非常小心地設置errorlevel環境變量順便說一下。這個特定的變量是一個特殊的變量,當你沒有專門設置它時,它會自動提供前一個程序的返回碼。

設置它顯式覆蓋此行爲,唯一的恢復方法是使用if errorlevel N而不是環境變量(它繞過環境變量),或使用set errorlevel=刪除覆蓋。

+0

@paxdiable:對於在一個cmd.exe窗口中設置的任何(env)變量,您對'%errorlevel%'環境變量的說法是正確的。它永遠不會自動出現在任何其他已經打開的cmd.exe窗口中。 – 2010-08-11 18:01:52

+0

是的,這是正確的。當我說錯誤級別是特殊的,那不是我所說的方面。沒有env-var從流程跳轉到流程。我只是警告反對設置錯誤級別,因爲它具有特殊的行爲通常,它設置防止。 – paxdiablo 2010-08-11 22:39:28

0

%errorlevel%(它不是大小寫敏感)是一個非常特殊的環境變量。這完全不意味着由用戶或批處理腳本進行設置。

此外,你可能會碰到你執行調用set errorlevel=15但張女士您成功執行set命令的問題,可能必須重新設置%errorlevel%你希望現在evaluete 0

如果您需要它

唯一「合法」的方式來評估%errorlevel%環境變量,使用重複的if errorlevel聲明:

if errorlevel 0 do somecommand 
if errorlevel 1 do somethingelse 
... 
if errorlevel 255 do lastalternative 

一切是很危險的。如果您確實需要幾行後使用當前%ERRORLEVEL%,然後使用類似

if errorlevel 0 do set myerrorlevel=0 

,然後讀出%myerrorlevel% ...

+2

如果錯誤級別X對於錯誤級別> = X爲真,則解析從0到255將導致始終執行0的命令。應該解析255到0(來自mod標誌,不是我的評論..) – 2011-01-08 11:39:12