ERRORLEVEL внутри IF

Просто наткнулся на странную вещь с %ERRORLEVEL% и хотел 9X_batch-files узнать, знает ли кто-нибудь, почему и есть 9X_winbatch ли способ исправить это. По сути, кажется, что 9X_cmd-script команды, выполняемые внутри операторов if, не 9X_batch устанавливают переменную %ERRORLEVEL%. Проверка ERRORLEVEL (как 9X_bat в IF ERRORLEVEL 1, который отличается от IF %ERRORLEVEL% EQU 1), похоже, все 9X_cmd-script еще работает нормально, поэтому я, вероятно, могу 9X_.bat обойти ее, но было бы неплохо иметь возможность 9X_batch-files распечатать уровень ошибки. Для отладки 9X_errorlevel или чего-то еще.

@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

Помещение этого в пакетный 9X_windows-batch файл и запуск дает следующий результат:

C: \ Users 9X_dos-batch \ username \ Documents \ work> test.bat 9X_.bat
OUTSIDE_IF 1
'ThisWillSetErrorLevelTo9009ieNotRecognizedCommand' не 9X_cmd-script распознается как внутренняя или внешняя 9X_batch-script команда, действующая программа или 9X_.bat командный файл.
OUTSIDE_IF 1
'ThisWillSetErrorLevelTo9009ieNotRecognizedCommand' не 9X_batch-script распознается как внутренняя или внешняя 9X_batch команда, действующая программа или 9X_.bat командный файл.
INSIDE_IF ERRORLEVEL 9X_bat 9009
INSIDE_IF2 ERRORLEVEL GREQ 1 9X_bat 9009
OUTSIDE_IF ОШИБКА 1

Соответствующие статьи:

42
0
1
Общее количество ответов: 1

Ответ #1

Ответ на вопрос: ERRORLEVEL внутри IF

Попробуйте использовать setlocal enabledelayedexpansion в начале вашего 9X_batch-files командного файла и !ERRORLEVEL! внутри вашего IF. Мне 9X_batch-script кажется, это работает:

@echo off
setlocal enabledelayedexpansion
dir nul
echo %ERRORLEVEL%
if .1.==.1. (
  urklbkrlksdj - not a command
  echo %ERRORLEVEL%
  echo !ERRORLEVEL!
)

48
2

  • Именно такие моменты позволяют понять, почем ...