Як правильно обробляти коди повернення з програм за допомогою errorlevel, windows, adminstuff

Раніше я не знав, як правильно використовувати в командних файлах (розширення .bat) ERRORLEVEL разом з оператором розгалуження IF. Через це у мене виникали помилки при написанні командних файлів.

Є також можливість прямої перевірки значення коду повернення, якщо використовувати в командному файлі змінну% ERRORLEVEL% (працює тільки в тому випадку, якщо Ви не примудрилися поставити змінну оточення з таким же ім'ям). Мінлива% ERRORLEVEL% розгортається в текстове значення коду повернення, що в дозволяє використовувати в командному файлі конструкції типу:
goto answer% ERRORLEVEL%
: answer0
echo Отримано код повернення 0
: answer1
echo Отримано код повернення 1

Старий текст статті

ERRORLEVEL 0 в командних файлах відпрацьовується неправильно

Припустимо, програма program0_4.exe на виході видає коди повернення від 0 до 4, і код повернення 0 означає, що помилок не було. Потрібно відфільтрувати оператором if факт відсутності помилки. У цьому випадку не можна використовувати перевірку if errorlevel 0, так як результат цієї перевірки не завжди вірний. Приклад 1 не працює, а Приклад 2 працює нормально.

rem Приклад 1 - чомусь іноді НЕ ПРАЦЮЄ
program0_4.exe
if errorlevel 0 goto ok
echo "Error!"
goto exit

ok
echo "O.K."

rem Приклад 2 - працює нормально
program0_4.exe
if errorlevel 1 goto error
if errorlevel 2 goto error
if errorlevel 3 goto error
if errorlevel 4 goto error
goto ok

ok
echo "O.K."
goto exit

error
echo "Error!"