Я не могу понять коды ошибок выбора партии

Если у меня есть такой код:

@echo off
choice /C BL /M "Clear screen or list actual directory"

if errorlevel 2 goto l
if errorlevel 1 goto b

:l
tree /f
goto final

:b
cls
goto final

:final

Я знаю, что это на самом деле работает, но меня смущает одна вещь в части уровня ошибки. Сначала я написал тот же код, но вот так:

if errorlevel 1 goto l
if errorlevel 2 goto b

И таким образом, он не будет работать должным образом. Он будет помнить только код ошибки 1. Если вы нажмете второй вариант, не работает.
Мне действительно интересно, почему порядок ошибок имеет значение, если партия должна выполняться построчно, или я ошибаюсь?
В двух словах, я хочу понять, как здесь работают коды ошибок.

2 ответа

Решение
C:\>if /?
...
IF [NOT] ERRORLEVEL number command
...
ERRORLEVEL number   Specifies a true condition if the last program run returned
                    an exit code equal to or greater than the number specified.

Другими словами, if errorlevel 1 выполняется для любого уровня ошибки (кроме 0 = нет ошибок), потому что все они равны или превышают 1.

Просто подсказка, при использовании %errorlevel% переменная, прикрепленная к метке goto, может быть довольно простой:

@echo off
choice /C BL /M "Clear screen or list actual directory"
goto :choice%errorlevel%

:choice1 B
tree /f
goto final

:choice2 L
cls
goto final

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