Čo je chyba?

V systéme Microsoft Windows a MS-DOS je errorlevel celočíselné číslo vrátené podriadeným procesom, keď sa ukončí.

Errorlevel je 0, ak bol proces úspešný.

Chybová úroveň je 1 alebo vyššia, ak sa v procese vyskytla chyba.

Testovanie errorlevel je užitočné, keď vykonávate sériu príkazov, buď na príkazovom riadku alebo v dávkovom súbore.

Pomocou podmieneného výrazu môžete zadať sériu príkazov, ktoré sa majú vyskytnúť iba vtedy, ak bol predchádzajúci príkaz úspešný. Môžete tiež otestovať zlyhanie, spúšťať príkazy iba v prípade, ak predchádzajúci príkaz zlyhal. Niekedy, ak ho program podporuje, môžete tiež otestovať špecifické typy chýb.

Môžete tiež vetviť vykonanie príkazu, aby sa vykonala iná množina príkazov, ak predchádzajúci príkaz zlyhal.

Podmienené "ak [ne] errorlevel"

Podmienený výraz " ak errorlevel n " je pravdivý, ak je errorlevel väčšia alebo rovná n .

Podobne, " ak nie je errorlevel n " je pravda, ak je errorlevel menšia ako n .

Pozrime sa na niekoľko príkladov, ako ich možno použiť, spustením niektorých príkazov na príkazovom riadku systému Windows.

Ak chcete začať, otvorte okno príkazového riadka: stlačte Win + X (podržte kláves Windows a stlačte X ) a zvoľte príkazový riadok .

Teraz spustíme jednoduchý príkaz:

 mkdir mydirectory 

Keď spustíme mkdir (za predpokladu, že v aktuálnom adresári už nie je adresár nazvaný "mydirectory"), vytvorí sa adresár mydirectory . Príkaz bol úspešný, takže keď mkdir ukončí, nastaví errorlevel na 0 .

Poďme test pre errorlevel 0.

Testovanie úspechu: "ak nie errorlevel"

Môžeme testovať errorlevel 0 (success) s podmieneným príkazom, ak nie errorlevel 1 . Ak je to pravda (errorlevel je menší ako 1), spustí sa príkaz, ktorý nasleduje za podmienkou. V nižšie uvedených príkladoch použijeme príkaz echo na vytlačenie správy na obrazovke.

 if not errorlevel 1 echo Posledný príkaz bol úspešný. 
 Posledný príkaz bol úspešný. 

Ako už bolo uvedené, príkaz mkdir, ktorý sme spustili vyššie, bol úspešný.

Ak sa však pokúšame vytvoriť adresár znova, mkdir zlyhá, pretože adresár mydirectory už existuje:

 mkdir mydirectory 
 Príklad podadresára alebo súboru už existuje. 

Keď mkdir zlyhá, poskytuje svoje vlastné chybové hlásenie, "A podadresár alebo príklad súboru už existuje" a nastaví errorlevel na 1. Ak znova spustíme náš podmienený príkaz:

 if not errorlevel 1 echo Posledný príkaz bol úspešný. 

Nič sa nedeje. Náš príkaz echo nebeží, pretože sme testovali na úspech - errorlevel menší ako 1 - a táto podmienka je nepravdivá.

Testovanie zlyhania: "if errorlevel"

Môžeme špecificky testovať zlyhanie s if errorlevel 1, ktorý vráti true, ak je errorlevel 1 alebo viac.

 if errorlevel 1 echo Posledný príkaz zlyhal. 
 Posledný príkaz zlyhal. 

Podmienka je splnená (pretože mkdir predtým nastavil errorlevel na 1) a spustí sa príkaz echo . To by tiež bežať, ak errorlevel bol 2, 3, 4, atď. Ak errorlevel bol 0, to by sa spustiť.

Vykonávanie vetvenia s if..else

Vo vyššie uvedených príkladoch sme testovali úspech alebo neúspech, ale nie oboje.

Môžeme otestovať úspech aj neúspech pomocou príkazu if / else formulára:

 if [ not ] errorlevel n ( command1 ) else ( command2 ) 

Poznámka: Závorky sú potrebné na oddelenie príkazov od slova else .

Napríklad:

 mkdir newtest 
 ak nie je errorlevel 1 (echo Success) else (echo Failure) 
 Úspech 
 mkdir newtest 
 Podadresár alebo súbor newtest už existuje. 
 ak nie je errorlevel 1 (echo Success) else (echo Failure) 
 zlyhanie 

Premenná prostredia% ERRORLEVEL%

Chybová úroveň sa často ukladá aj do premennej prostredia % ERRORLEVEL% . Jeho hodnota je pohodlný spôsob prístupu k vašej aktuálnej úrovni chýb.

V nasledujúcom príklade spustíme príkaz dir dvakrát, raz úspešne a raz neúspešne. Po každom z nich sa ozve hodnota % ERRORLEVEL% .

 príklad mkdir 
 príklad 
 Adresár C: Užívatelia Dúfam, že 06/10/2018 09:43 PM. 06/10/2018 09:43 .. 0 Súbor (y) 0 bytes 2 Dir (s) 50, 671, 132, 672 bajtov zadarmo 
 echo% ERRORLEVEL% 
 0 
 dir chybne 
 Adresár C: Užívatelia Dúfam, že súbor nebol nájdený 
 echo% ERRORLEVEL% 
 1 

Použitie% ERRORLEVEL% v podmienkach

% ERRORLEVEL% môžete použiť v podmienkach, napríklad:

 ak% ERRORLEVEL% NEQ 0 echo Errorlevel nie je rovné nule, posledný príkaz zlyhal. 

Tip: NEQ je relačný operátor, ktorý znamená "nie je rovný".

Poznámka:% ERRORLEVEL% nie je vždy správne

% ERRORLEVEL% nie je rovnaké ako if not errorlevel a tieto dve hodnoty nie sú vždy rovnaké. Konkrétne, % ERRORLEVEL% nie je vždy aktualizované, keď sa zmení chyba. Ďalšie informácie nájdete v tomto blogu MSDN spoločnosti Raymond Chen.

Z tohto dôvodu, ak testujete errorlevel vo výrobnom prostredí, je lepšie použiť ak nie je errorlevel .

Nástroj na vyhľadávanie chýb

Pre pokročilých používateľov a vývojárov softvéru vydala spoločnosť Microsoft nástroj príkazového riadka errorlevel lookup, err.exe . To vám umožní vyhľadávať errorlevels podľa čísla alebo interný názov, a obmedziť vyhľadávanie podľa hlavičkového súboru, v ktorom je definovaná errorlevel.

 err /winerror.h 0 
 # winerror.h vybraté. # pre hex 0x0 / decimal 0: ERROR_SUCCESS winerror.h # Operácia bola úspešne dokončená. NO_ERROR winerror.h SEC_E_OK winerror.h S_OK winerror.h # 4 nájdených výsledkov pre "0" 
 err /cmdmsg.h 9009 
 # cmdmsg.h vybraté. # pre desatinné číslo 9009 / hex 0x2331: MSG_DIR_BAD_COMMAND_OR_FILE cmdmsg.h # '% 1' nie je rozpoznaný ako interný alebo externý príkaz, # operable program alebo dávkový súbor. Nájdené 1 výsledky pre výraz "9009" 

Nástroj si môžete stiahnuť priamo od spoločnosti Microsoft.

Termíny programovania