Как сохранить 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
поддаваться желанию ответа.