Как сохранить ERRORLEVEL в переменной?

Я пытаюсь хранить ERRORLEVEL переменная окружения в локальную переменную пакета. Но это всегда оказывается 0,

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 обновляется правильно.

2 ответа

Решение

Я полагаю, ваша проблема не в уровне ошибок, а в вашем 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!
)

ERRORLEVEL а также %ERRORLEVEL% не совпадают (см. http://blogs.msdn.com/b/oldnewthing/archive/2008/09/26/8965755.aspx).

Линия

IF ERRORLEVEL 1

должно быть

IF %ERRORLEVEL% EQU 1

поддаваться желанию ответа.

Другие вопросы по тегам