Hva er et feilnivå?

I Microsoft Windows og MS-DOS er et feilnivå heltallet som returneres av en barneprosess når den avsluttes.

Errorlevel er 0 hvis prosessen var vellykket.

Feilnivå er 1 eller høyere hvis prosessen oppsto en feil.

Testing errorlevel er nyttig når du utfører en rekke kommandoer, enten på kommandolinjen eller i en batchfil.

Ved hjelp av et betinget uttrykk kan du spesifisere en rekke kommandoer som bare skal oppstå hvis en tidligere kommando var vellykket. Du kan også teste for feil, bare utføre kommandoer hvis den forrige kommandoen mislyktes. Noen ganger, hvis programmet støtter det, kan du også teste for bestemte typer feil.

Du kan også avgrense kommandoen kjøring, slik at et annet sett med kommandoer utføres hvis den forrige kommandoen mislyktes.

Betinget "hvis [ikke] errorlevel"

Det betingede uttrykket " hvis errorlevel n " er sant hvis feilnivået er større enn eller lik n .

Tilsvarende er " om ikke errorlevel n " sant hvis feilnivået er mindre enn n .

La oss se på noen eksempler på hvordan disse kan brukes, ved å kjøre noen kommandoer på Windows-kommandolinjen.

For å starte, åpne et ledetekstvindu: trykk på Win + X (hold nede Windows-tasten og trykk X ), og velg Kommandoprompt .

La oss nå kjøre en enkel kommando:

 mkdir mydirectory 

Når vi kjører mkdir (forutsatt at det ikke allerede er en katalog som heter "mydirectory" i den nåværende katalogen), blir mappen min katalog opprettet. Kommandoen var vellykket, så når mkdir slutter, setter det feilnivået til 0 .

La oss teste for errorlevel 0.

Testing suksess: "hvis ikke feil"

Vi kan teste for errorlevel 0 (suksess) med betinget utsagn hvis ikke errorlevel 1 . Hvis det er sant (feilnivå er mindre enn 1), vil kommandoen som følger den betingede viljen løpe. I eksemplene nedenfor bruker vi ekkokommandoen til å skrive ut en melding på skjermen.

 hvis ikke errorlevel 1 echo Den siste kommandoen var vellykket. 
 Den siste kommandoen var vellykket. 

Som angitt var mkdir- kommandoen vi kjørte over, vellykket.

Men hvis vi prøver å lage katalogen igjen, vil mkdir mislykkes, fordi katalogen mindirectory allerede eksisterer:

 mkdir mydirectory 
 Et underkatalog eller fileksempel eksisterer allerede. 

Når mkdir feiler, gir den sin egen feilmelding, "En underkatalog eller fileksempel eksisterer allerede", og setter feilnivået til 1. Hvis vi kjører vår betingede setning igjen:

 hvis ikke errorlevel 1 echo Den siste kommandoen var vellykket. 

Ingenting skjer. Vår ekkokommando kjøres ikke, fordi vi testet for suksess - feilnivå mindre enn 1 - og den tilstanden er feil.

Testfeil: "hvis feilgjøre"

Vi kan spesifikt teste for feil med hvis errorlevel 1, som returnerer sant hvis feilnivået er 1 eller høyere.

 hvis errorlevel 1 echo Den siste kommandoen mislyktes. 
 Den siste kommandoen mislyktes. 

Tilstanden er oppfylt (fordi mkdir tidligere angav errorlevel til 1), og ekkokommandoen kjører. Det ville også løpe hvis errorlevel var 2, 3, 4, etc. Hvis errorlevel var 0, ville det ikke løpe.

Forgrening av utførelse med if..else

I eksemplene ovenfor testet vi for suksess eller fiasko, men ikke begge.

Vi kan teste for både suksess og fiasko ved å bruke en if / else-setning av skjemaet:

 hvis [ ikke ] errorlevel n ( command1 ) else ( command2 ) 

Merk: parentesene er nødvendige for å skille kommandoene fra ordet annet .

For eksempel:

 mkdir nyhetstest 
 hvis ikke errorlevel 1 (ekko suksess) annet (ekkosvikt) 
 Suksess 
 mkdir nyhetstest 
 En underkatalog eller fil ny test finnes allerede. 
 hvis ikke errorlevel 1 (ekko suksess) annet (ekkosvikt) 
 Failure 

% ERRORLEVEL% miljøvariabel

Ofte lagres feilnivået også i miljøvariabelen % ERRORLEVEL% . Verdien er en praktisk måte å få tilgang til nåværende feilnivå.

I det følgende eksemplet kjører vi kommandoen dir to ganger, en gang til vellykket og en gang uten suksess. Etter hver ekko vi verdien av % ERRORLEVEL% .

 mkdir eksempel 
 dir eksempel 
 Katalog over C: \ Users \ Hope \ example 06/10/2018 09:43. 06/10/2018 09:43 .. 0 Fil (er) 0 byte 2 Dir (er) 50, 671, 132, 672 bytes gratis 
 ekko% ERRORLEVEL% 
 0 
 dir feilstavet 
 Katalog over C: \ Users \ Hope-fil ble ikke funnet 
 ekko% ERRORLEVEL% 
 1 

Bruk% ERRORLEVEL% i betingelsene

Du kan bruke % ERRORLEVEL% i betingelsene, for eksempel:

 hvis% ERRORLEVEL% NEQ 0 echo Errorlevel ikke er lik null, har den siste kommandoen mislyktes. 

Tips: NEQ er relasjonsoperatøren som betyr "ikke lik".

Merk:% ERRORLEVEL% er ikke alltid korrekt

% ERRORLEVEL% er ikke det samme som om [ ikke ] errorlevel, og de to verdiene er ikke alltid de samme. Spesielt blir % ERRORLEVEL% ikke alltid oppdatert når feilen endres. For mer informasjon, se dette MSDN blogginnlegget av Raymond Chen.

Av denne grunn, hvis du tester errorlevel i et produksjonsmiljø, er det bedre å bruke hvis [ ikke ] errorlevel .

Feilsøkingsverktøy

For avanserte brukere og programvareutviklere har Microsoft gitt ut et kommandolinjefeilopplæringsverktøy, err.exe . Den lar deg søke etter feilverdier etter nummer eller internnavn, og begrense søket ditt etter headerfilen der feilenivået er definert.

 err /winerror.h 0 
 # winerror.h valgt. # for hex 0x0 / decimal 0: ERROR_SUCCESS winerror.h # Operasjonen ble fullført. NO_ERROR winerror.h SEC_E_OK winerror.h S_OK winerror.h # 4 treff funnet for "0" 
 feil / cmdmsg.h 9009 
 # cmdmsg.h valgt. # for desimal 9009 / hex 0x2331: MSG_DIR_BAD_COMMAND_OR_FILE cmdmsg.h # '% 1' blir ikke gjenkjent som en intern eller ekstern kommando, # operativ program eller batchfil. # 1 treff funnet for "9009" 

Du kan laste ned verktøyet direkte fra Microsoft.

Programmeringsbetingelser