Просто наткнулся на странную вещь с %ERRORLEVEL%
и хотел посмотреть, знает ли кто-нибудь, почему и есть ли способ это исправить.По сути, кажется, что команды выполняются внутри, если операторы не устанавливают переменную %ERRORLEVEL%
.Проверка ERRORLEVEL
(как в IF ERRORLEVEL 1
, которая отличается от IF %ERRORLEVEL% EQU 1
), кажется, все еще работает нормально, поэтому я, вероятно, могу обойти ее, но было бы неплохо иметь возможность печатать уровень ошибки.Для отладки или чего-либо еще.
@echo off
Set TESTVAR=1
tasklist | find /I "IsntRunning.exe" > NUL
echo OUTSIDE_IF %ERRORLEVEL%
ThisWillSetErrorLevelTo9009ieNotRecognizedCommand
tasklist | find /I "IsntRunning.exe" > NUL
echo OUTSIDE_IF %ERRORLEVEL%
ThisWillSetErrorLevelTo9009ieNotRecognizedCommand
IF %TESTVAR% EQU 1 (
Set ERRORLEVEL=
tasklist | find /I "IsntRunning.exe" > NUL
echo INSIDE_IF ERRORLEVEL %ERRORLEVEL%
IF ERRORLEVEL 1 (
echo INSIDE_IF2 ERRORLEVEL GREQ 1 %ERRORLEVEL%
)
IF ERRORLEVEL 2 (
echo INSIDE_IF2 ERRORLEVEL GREQ 2 %ERRORLEVEL%
)
IF ERRORLEVEL 3 (
echo INSIDE_IF2 ERRORLEVEL GREQ 3 %ERRORLEVEL%
)
)
tasklist | find /I "IsntRunning.exe" > NUL
echo OUTSIDE_IF ERRORLEVEL %ERRORLEVEL%
@echo on
Помещение в пакетный файл и запуск его приводит к выводу:
C: \ Users \ имя пользователя \ Documents \ work> test.bat
OUTSIDE_IF 1
'ThisWillSetErrorLevelTo9009ieNotRecognizedCommand' не распознан как внутренняя или внешняя команда, работающая программа или пакетный файл.
OUTSIDE_IF 1
'ThisWillSetErrorLevelTo9009 не распознается как внешняя операционная команда или не является операционной системойили пакетный файл.
INSIDE_IF ERRORLEVEL 9009
INSIDE_IF2 ERRORLEVEL GREQ 1 9009
OUTSIDE_IF ERRORLEVEL 1
Соответствующие статьи: