Какво е нивото на грешка?

В Microsoft Windows и MS-DOS грешката е цяло число, което се връща от детски процес, когато се прекрати.

Errorlevel е 0, ако процесът е успешен.

Errorlevel е 1 или по-голяма, ако процесът е срещнал грешка.

Проверката на грешките е полезна, когато изпълнявате серия от команди, или в командния ред, или в команден файл.

С помощта на условен израз можете да зададете серия от команди, които да се изпълняват само ако предишна команда е била успешна. Можете също така да тествате за неуспех, изпълнявайки команди само ако предишната команда е неуспешна. Понякога, ако програмата го поддържа, можете да тествате и за специфични типове грешки.

Можете също да разклоните изпълнението на командите, така че да се изпълни различен набор от команди, ако предишната команда се провали.

Условно "ако [не] грешка"

Условният израз " if errorlevel n " е вярно, ако грешката е по-голяма или равна на n .

По същия начин " ако не е грешка " е вярно, ако грешката е по-малка от n .

Нека разгледаме някои примери за това как могат да бъдат използвани, като изпълним някои команди в командния ред на Windows.

За да започнете, отворете прозореца на командния ред: натиснете Win + X (задръжте клавиша Windows и натиснете X ) и изберете Command Prompt .

Сега нека изпълним проста команда:

 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 на формуляра:

 ако [ не ] грешка n ( команда1 ) друго ( command2 ) 

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

Например:

 mkdir newtest 
 ако не е грешка 1 (успех на ехото) иначе (неизправност на ехото) 
 успех 
 mkdir newtest 
 Вече съществува поддиректория или файл newtest. 
 ако не е грешка 1 (успех на ехото) иначе (неизправност на ехото) 
 неуспех 

% ERRORLEVEL% променлива на околната среда

Често грешката се съхранява и в променливата % ERRORLEVEL% . Неговата стойност е удобен начин за достъп до текущото ниво на грешка.

В следващия пример изпълняваме командата dir два пъти, веднъж успешно и веднъж неуспешно. След всеки echo стойността на % ERRORLEVEL% .

 пример на mkdir 
 напр 
 Директория на C: Потребители Надявам се 06/10/2018 09:43 PM. 06/10/2018 09:43 PM .. 0 Файл (а) 0 байта 2 Dir (s) 50, 671, 132, 672 байта безплатно 
 echo% ERRORLEVEL% 
 0 
 реж 
 Директория на C: Потребители Надявам се, че файлът не е намерен 
 echo% ERRORLEVEL% 
 1 

Използване на% ERRORLEVEL% в условия

Можете да използвате % ERRORLEVEL% в условия, например:

 Ако% ERRORLEVEL% NEQ 0 echo Errorlevel не е равен на нула, последната команда е неуспешна. 

Съвет: NEQ е релационният оператор, което означава "не е равно на".

Забележка:% ERRORLEVEL% не винаги е правилно

% ERRORLEVEL% не е същото, както ако [ not ] errorlevel, и двете стойности не винаги са едни и същи. По-конкретно, % ERRORLEVEL% не винаги се актуализира, когато се промени грешката. За повече информация, вижте тази публикация в блога на MSDN от Raymond Chen.

Поради тази причина, ако тествате грешката в производствена среда, по-добре е да я използвате, ако не .

Инструмент за търсене на грешки

За напреднали потребители и разработчици на софтуер 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 избран. # for decimal 9009 / hex 0x2331: MSG_DIR_BAD_COMMAND_OR_FILE cmdmsg.h # '% 1' не се разпознава като вътрешна или външна команда, # работна програма или команден файл. № 1 намерени резултати за "9009" 

Можете да изтеглите инструмента директно от Microsoft.

Условия за програмиране