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
Соответствующие статьи:
Ответ #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!
)
- Именно такие моменты позволяют понять, почем ...
-
10
-
2
-
5
-
3
-
2
-
1
-
1
-
4
-
1
-
2
-
2
-
9
-
19
-
9
-
6
-
24
-
5
-
25
-
7
-
4
-
3
-
8
-
11
-
9
-
2
-
13
-
7
-
19
-
15
-
5
-
17
-
3
-
16
-
20
-
10
-
12
-
14
-
10
-
10
-
27
-
5
-
12
-
7
-
24
-
6
-
2
-
11
-
11
-
8
-
6