2013-10-10 2 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) устанавливает ERRORLEVEL до 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%» будет печатать переменную среды «ERRORLEVEL» для 'CALL'. –

+0

Я протестировал код, и он работает. Но, вероятно, вы не видите соответствующую часть своего сценария. Думаю: ваша проблема - это процентное расширение блоков кода. См. Второй образец – jeb

+0

Спасибо, я не знал! ПЕРЕМЕН! синтаксис ... отлично работает сейчас :) –

Смежные вопросы