Kaj je stopnja napake?

V operacijskih sistemih Microsoft Windows in MS-DOS je stopnja napake celo število, ki ga vrne otroški proces, ko se konča.

Errorlevel je 0, če je bil postopek uspešen.

Errorlevel je 1 ali več, če je proces naletel na napako.

Testiranje napake je uporabno, če izvajate vrsto ukazov v ukazni vrstici ali v paketni datoteki.

Z uporabo pogojnega izraza lahko podate vrsto ukazov, ki naj se pojavijo le, če je bil prejšnji ukaz uspešen. Preskusite lahko tudi napako, pri čemer ukaze izvajate samo, če prejšnji ukaz ni uspel. Včasih, če ga program podpira, lahko preizkusite tudi določene vrste napak.

Izvedbo ukaza lahko tudi razdelite, tako da se izvede drugačen nabor ukazov, če prejšnji ukaz ni uspel.

Pogojno "če [ne] napaka"

Pogojni izraz " if errorlevel n " je res, če je stopnja napake večja ali enaka n .

Podobno je " if not errorlevel n " res, če je stopnja napake manjša od n .

Poglejmo nekaj primerov, kako jih lahko uporabimo, tako da zaženemo nekaj ukazov v ukazni vrstici Windows.

Za začetek odprite okno ukaznega poziva: pritisnite Win + X (držite tipko Windows in pritisnite X ) in izberite ukazni poziv .

Zdaj pa zaženimo preprost ukaz:

 mkdir mydirectory 

Ko zaženemo mkdir (če v trenutnem imeniku še ni imenika, imenovanega "mydirectory"), se ustvari imenik mydirectory . Ukaz je bil uspešen, tako da, ko se mkdir konča, nastavi stopnjo napake na 0 .

Preskusimo napako 0.

Uspešnost testiranja: "če ne napaka"

Lahko testiramo napako 0 (uspeh) s pogojnim stavkom, če ne gre za stopnjo napake 1 . Če je to res (napaka je manjša od 1), se bo zagnal ukaz, ki sledi pogoju. V spodnjih primerih bomo z ukazom echo natisnili sporočilo na zaslonu.

 if not errorlevel 1 echo Zadnji ukaz je bil uspešen. 
 Zadnji ukaz je bil uspešen. 

Kot je bilo navedeno, je bil ukaz mkdir, ki smo ga opravili zgoraj, uspešen.

Če pa poskusimo ponovno ustvariti imenik, mkdir ne bo uspel, ker imenik mydirectory že obstaja:

 mkdir mydirectory 
 Podimenik ali primer datoteke že obstaja. 

Ko mkdir ne uspe, poda svoje sporočilo o napaki, "Podimenik ali primer datoteke že obstaja, " in nastavi napako na 1. Če znova zaženemo pogojni stavek:

 if not errorlevel 1 echo Zadnji ukaz je bil uspešen. 

Se ne zgodi nič. Naš echo ukaz se ne izvaja, ker smo testirali uspeh - napaka manjša od 1 - in ta pogoj je napačen.

Napaka testiranja: "če je napaka"

Lahko posebej testiramo napako z napako 1, ki vrne true, če je stopnja napake 1 ali večja.

 if errorlevel 1 echo Zadnji ukaz ni uspel. 
 Zadnji ukaz ni uspel. 

Pogoj je izpolnjen (ker je mkdir predhodno nastavil vrednost errorlevel na 1) in zagnan je ukaz echo . Deloval bi tudi, če bi bila stopnja napake 2, 3, 4 itd. Če je stopnja napake 0, se ne bi zagnal.

Izvajanje z razvejanjem z, če ..else

V zgornjih primerih smo testirali uspeh ali neuspeh, ne pa obeh.

Za uspeh in neuspeh lahko uporabimo izjavo if / else obrazca:

 če ni [ ni ] napak napak n ( command1 ) drugje ( command2 ) 

Opomba: Oklepaji so potrebni za ločevanje ukazov od drugega .

Na primer:

 mkdir newtest 
 če ne napaka 1 (uspeh uspeha) drugo (echo Failure) 
 Uspeh 
 mkdir newtest 
 Podimenik ali datoteka newtest že obstaja. 
 če ne napaka 1 (uspeh uspeha) drugo (echo Failure) 
 Neuspeh 

% ERRORLEVEL% spremenljivka okolja

Pogosto je tudi stopnja napake shranjena v spremenljivki okolja % ERRORLEVEL% . Njegova vrednost je priročen način za dostop do trenutnega nivoja napak.

V naslednjem primeru naredimo ukaz dir dvakrat, enkrat uspešno in enkrat neuspešno. Po vsakem odsevamo vrednost % ERRORLEVEL% .

 primer mkdir 
 primer 
 Imenik C: Uporabniki Upanje Primer 06/10/2018 09:43 PM. 06/10/2018 21:43 .. 0 Datoteka (-i) 0 bytes 2 Dir (s) 50, 671, 132, 672 bajtov free 
 echo% ERRORLEVEL% 
 0 
 dir napačno 
 Imenik C: Uporabniki Upanje Datoteka ni najdena 
 echo% ERRORLEVEL% 
 1 

Uporaba% ERRORLEVEL% v pogojih

Uporabite lahko % ERRORLEVEL% v pogojih, na primer:

 če% ERRORLEVEL% NEQ 0 echo Errorlevel ni enak nič, zadnji ukaz ni uspel. 

Nasvet: NEQ je relacijski operater, kar pomeni "ni enako."

Opomba:% ERRORLEVEL% ni vedno pravilna

% ERRORLEVEL% ni enako kot, če [ not ] errorlevel, in obe vrednosti nista vedno enaki. Natančneje, % ERRORLEVEL% se ne posodobi vedno, ko se sprememba napake spremeni. Za več informacij si oglejte objavo na blogu MSDN Raymonda Chena.

Če torej testirate nivo napak v produkcijskem okolju, je bolje uporabiti, če [ ni ] errorlevel .

Orodje za iskanje napak

Za napredne uporabnike in razvijalce programske opreme je Microsoft izdal orodje za iskanje napak ukazne vrstice, err.exe . Omogoča iskanje po stopnjah napak po številu ali notranjem imenu in omejitev iskanja po datoteki glave, v kateri je definiran nivo napake.

 err /winerror.h 0 
 # winerror.h je izbran. # za hex 0x0 / decimal 0: ERROR_SUCCESS winerror.h # Operacija se je uspešno zaključila. NO_ERROR winerror.h SEC_E_OK winerror.h S_OK winerror.h # 4 zadetkov za "0" 
 err /cmdmsg.h 9009 
 # cmdmsg.h izbran. # for decimal 9009 / hex 0x2331: MSG_DIR_BAD_COMMAND_OR_FILE cmdmsg.h # '% 1' ni prepoznan kot notranji ali zunanji ukaz, # operabilni program ali paketna datoteka. Najden je bil št. 1 za "9009" 

Orodje lahko prenesete neposredno od Microsofta.

Programski izrazi