2013-10-10 149 views
1

我試圖將ERRORLEVEL環境變量存儲到本地批處理變量中。但它總是結果爲0如何將ERRORLEVEL存儲在變量中?

CALL foo.exe 
SET LEVEL=%ERRORLEVEL% 
IF ERRORLEVEL 1 (
    SET /A ERRORCOUNT=ERRORCOUNT+1 
) ELSE (
    SET /A OK=OK+1 
) 
ECHO/ >> logtemp.txt 
ECHO ** EXIT %LEVEL% ******************************* 

我試圖ECHO %ERRORLEVEL%,但它總是打印0了。

foo.exe正在生成一個錯誤,它可以從命令提示符下通過ECHO %ERRORLEVEL%ERRORCOUNT正確更新。

回答

6

我想你的問題不是錯誤級別,它是你的foo.exe。

一個錯誤級別的簡單測試的工作。
(call)設定錯誤級別爲1

(call) 
SET LEVEL=%ERRORLEVEL% 
IF ERRORLEVEL 1 (
    SET /A ERRORCOUNT=ERRORCOUNT+1 
) ELSE (
    SET /A OK=OK+1 
) 
ECHO/ >> logtemp.txt 
ECHO ** EXIT %LEVEL% ******************************* 

第二樣品:

if 1==1 (
    call set level=%%errorlevel%% 
    call echo %%level%% 
    call echo %%errorlevel%% 
    echo %errorlevel% 
) 

或者與延遲擴展

setlocal EnableDelayedExpansion 
if 1==1 (
    set level=!errorlevel! 
    echo !level! !errorlevel! 
) 
+0

問題是不設置'ERRORLEVEL'環境變量,if ... else工作正常。問題是將'LEVEL'設置爲'ERRORLEVEL'環境變量值,所以'ECHO%LEVEL%'將爲'CALL'打印環境變量'ERRORLEVEL'。 –

+0

我測試了代碼,它的工作原理。但是可能你不會顯示腳本的相關部分。我猜:你的問題是代碼塊的百分比擴展。查看第二個樣本 – jeb

+0

謝謝,我不知道!VARIABLE!語法...現在正常工作:) –