Що таке рівень помилок?

У Microsoft Windows і MS-DOS рівень помилок є цілим числом, яке повертає дочірній процес, коли він закінчується.

Errorlevel дорівнює 0, якщо процес був успішним.

Errorlevel має 1 або більше, якщо в процесі виникла помилка.

Тестовий рівень помилок корисний, коли ви виконуєте ряд команд, або в командному рядку, або в пакетному файлі.

Використовуючи умовний вираз, ви можете вказати серію команд, які будуть виконуватися, лише якщо попередня команда була успішною. Ви також можете перевірити на помилку, виконуючи команди тільки якщо попередня команда не вдалася. Іноді, якщо програма підтримує її, ви також можете перевірити конкретні типи помилок.

Ви також можете розгалужувати виконання команд, так що виконується інший набір команд, якщо попередня команда не вдалася.

Умовне "якщо [не] помилка"

Умовний вираз " якщо errorlevel n " є істинним, якщо рівень помилки більше або дорівнює n .

Аналогічно, " якщо не помилка n " є істинним, якщо рівень помилки менше n .

Давайте подивимося на деякі приклади того, як їх можна використовувати, запустивши деякі команди на командному рядку Windows.

Для початку відкрийте вікно командного рядка: натисніть Win + X (утримуйте клавішу Windows і натисніть X ) і виберіть командний рядок .

Тепер запустіть просту команду:

 mkdir mydirectory 

Коли ми запускаємо mkdir (якщо в поточному каталозі вже немає каталогу, який називається "mydirectory", створюється директорія mydirectory . Команда була успішною, тому, коли mkdir закінчується, вона встановлює рівень помилки до 0 .

Давайте перевіримо рівень помилок 0.

Успіх тестування: "якщо не помилка"

Ми можемо перевірити помилку 0 (успіх) за допомогою умовного оператора, якщо не помилка 1 . Якщо це правда (рівень помилок менше 1), команда, яка слідує за умовою, буде виконуватися. У наведених нижче прикладах ми будемо використовувати команду echo для друку повідомлення на екрані.

 if not errorlevel 1 echo Остання команда була успішною. 
 Остання команда була успішною. 

Як було зазначено, команда mkdir, яку ми виконали, була успішною.

Однак, якщо ми спробуємо знову створити каталог, mkdir буде невдалий, оскільки директорія mydirectory вже існує:

 mkdir mydirectory 
 Підкаталог або приклад файлу вже існує. 

Коли mkdir виходить з ладу, він надає своє повідомлення про помилку: "Підкаталог або приклад файлу вже існує" і встановлює рівень помилки до 1. Якщо ми знову запустимо умовний оператор:

 if not errorlevel 1 echo Остання команда була успішною. 

Нічого не відбувається. Наша команда echo не запускається, тому що ми перевірили на успіх - рівень помилки менше 1 - і це умова помилкове.

Помилка тестування: "якщо рівень помилок"

Ми можемо конкретно перевірити на помилку з iflevelle 1, який повертає true, якщо рівень помилки 1 або більше.

 if errorlevel 1 echo Остання команда не вдалася. 
 Помилка останньої команди. 

Умова виконується (оскільки раніше mkdir встановив рівень помилок до 1), і виконується команда echo . Він також працюватиме, якщо рівень помилок був 2, 3, 4 тощо. Якщо рівень помилки дорівнював 0, він не працював.

Розгалуження виконання з if..else

У наведених вище прикладах ми перевірили на успіх або невдачу, але не на обидва.

Ми можемо перевірити як успіх, так і відмову, використовуючи вираз if / else форми:

 if [ not ] errorlevel n ( command1 ) else ( команда2 ) 

Примітка: дужки необхідні для розділення команд від слова else .

Наприклад:

 mkdir newtest 
 якщо не помилка 1 (ехо успіх), то інше (відмова ехо) 
 Успіх 
 mkdir newtest 
 Підкаталог або файл newtest вже існує. 
 якщо не помилка 1 (ехо успіх), то інше (відмова ехо) 
 Невдача 

% ERRORLEVEL% змінної середовища

Часто рівень помилок також зберігається в змінної середовища % ERRORLEVEL% . Його значення є зручним способом доступу до поточного рівня помилок.

У наступному прикладі ми запускаємо команду dir двічі, один раз успішно і один раз безуспішно. Після кожного повторюємо значення % ERRORLEVEL% .

 mkdir приклад 
 приклад дир 
 Каталог C: Користувачі Сподіваюся, наприклад, 06/10/2018 09:43 PM. 06/10/2018 09:43 PM .. 0 Файл (а) 0 байт 2 Dir (s) 50, 671, 132, 672 байтів безкоштовно \ t 
 echo% ERRORLEVEL% 
 0 
 dir неправильно написано 
 Каталог C: Користувачі Сподіваються, що файл не знайдено 
 echo% ERRORLEVEL% 
 1 

Використання% ERRORLEVEL% у умові

Ви можете використовувати % ERRORLEVEL% в умовах, наприклад:

 якщо% ERRORLEVEL% NEQ 0 echo Errorlevel не дорівнює нулю, остання команда не вдалася. 

Порада: NEQ є реляційним оператором, що означає "не дорівнює".

Примітка:% ERRORLEVEL% не завжди є правильним

% ERRORLEVEL% не те саме, що якщо [ not ] errorlevel, і ці два значення не завжди однакові. Зокрема, % ERRORLEVEL% не завжди оновлюється, коли змінюється рівень помилок. Для отримання додаткової інформації див цей пост блогу MSDN від Raymond Chen.

З цієї причини, якщо ви перевіряєте рівень помилок у виробничому середовищі, краще використовувати, якщо [ не ] errorlevel .

Інструмент пошуку помилок

Для просунутих користувачів і розробників програмного забезпечення Microsoft випустила інструмент пошуку помилок командного рядка, err.exe . Вона дозволяє шукати рівні помилок за номером або внутрішньою назвою, а також обмежувати пошук за заголовним файлом, в якому визначається рівень помилок.

 err /winerror.h 0 
 # winerror.h вибрано. # для hex 0x0 / decimal 0: ERROR_SUCCESS winerror.h # Операція успішно завершена. NO_ERROR winerror.h SEC_E_OK winerror.h S_OK winerror.h # 4 знайдено для "0" 
 err /cmdmsg.h 9009 
 # cmdmsg.h обрано. # для decimal 9009 / hex 0x2331: MSG_DIR_BAD_COMMAND_OR_FILE cmdmsg.h # '% 1' не розпізнається як внутрішня або зовнішня команда, # оперативна програма або пакетний файл. Зареєстрованих # 1 за "9009" 

Інструмент можна завантажити безпосередньо з корпорації Майкрософт.

Терміни програмування