Vad är ett Errorlevel?

I Microsoft Windows och MS-DOS är ett felmeddelande det heltal som returneras av en barnprocess när den upphör.

Errorlevel är 0 om processen lyckades.

Felnivå är 1 eller högre om processen uppstod ett fel.

Testing errorlevel är användbart när du kör en serie kommandon, antingen på kommandoraden eller i en batchfil.

Med ett villkorligt uttryck kan du ange en serie kommandon som endast ska uppstå om ett tidigare kommando lyckades. Du kan också testa för misslyckande, exekvera kommandon endast om föregående kommando misslyckades. Ibland kan programmet, om programmet stöder det, testa specifika typer av fel.

Du kan också avgränsa kommandotillförandet, så att en annan uppsättning kommandon exekveras om föregående kommando misslyckades.

Villkorlig "om [inte] errorlevel"

Det villkorliga uttrycket " om errorlevel n " är sant om felet är större än eller lika med n .

På samma sätt är " om inte errorlevel n " sant om felet är mindre än n .

Låt oss titta på några exempel på hur dessa kan användas, genom att köra några kommandon på Windows-kommandoraden.

Börja med att öppna ett kommandotolfönster: tryck på Win + X (håll ner Windows-tangenten och tryck på X ) och välj Kommandotolken .

Låt oss nu köra ett enkelt kommando:

 mkdir mydirectory 

När vi kör mkdir (förutsatt att det inte redan finns en katalog som heter "mydirectory" i den aktuella katalogen), skapas katalogens katalog . Kommandot var framgångsrikt, så när mkdir slutar sätter det felet till 0 .

Låt oss testa för errorlevel 0.

Testa framgång: "om inte felaktigt"

Vi kan testa för errorlevel 0 (success) med villkorligt uttalande om inte errorlevel 1 . Om det är sant (felaktigt är mindre än 1), kommer kommandot som följer den villkorliga körningen att köras. I exemplen nedan använder vi ekkokommandot för att skriva ut ett meddelande på skärmen.

 om inte errorlevel 1 echo Det sista kommandot var framgångsrikt. 
 Det sista kommandot var framgångsrikt. 

Som angivet var mkdir- kommandot vi körde ovan framgångsrikt.

Om vi ​​försöker att göra katalogen igen, kommer mkdir att misslyckas, eftersom katalogen mindirectory redan finns:

 mkdir mydirectory 
 Ett underkatalog eller filexempel finns redan. 

När mkdir misslyckas ger det ett eget felmeddelande, "En underkatalog eller filexempel existerar redan" och ställer in felet till 1. Om vi ​​kör vårt villkorade uttalande igen:

 om inte errorlevel 1 echo Det sista kommandot var framgångsrikt. 

Ingenting händer. Vårt echo- kommando kör inte, eftersom vi testade på framgång - errorlevel mindre än 1 - och det här tillståndet är felaktigt.

Testfel: "om felaktigt"

Vi kan specifikt testa för misslyckande med om errorlevel 1, vilket returnerar sant om errorlevel är 1 eller högre.

 om errorlevel 1 echo Det sista kommandot misslyckades. 
 Det sista kommandot misslyckades. 

Villkoren är uppfyllda (eftersom mkdir tidigare ställt in felet till 1) och ekokommandot körs. Det skulle också köras om felet var 2, 3, 4 etc. Om felet var 0, skulle det inte springa.

Förgrena utförandet med if..else

I ovanstående exempel testade vi för framgång eller misslyckande, men inte båda.

Vi kan testa för både framgång och misslyckande genom att använda ett if / else-formulär:

 om [ inte ] errorlevel n ( command1 ) else ( command2 ) 

Obs! Parenteserna är nödvändiga för att skilja kommandon från ordet annars .

Till exempel:

 mkdir newtest 
 om inte errorlevel 1 (echo Success) annars (ekofel) 
 Framgång 
 mkdir newtest 
 En underkatalog eller filnyckel finns redan. 
 om inte errorlevel 1 (echo Success) annars (ekofel) 
 Fel 

% ERRORLEVEL% miljövariabel

Ofta lagras även felminnet i miljövariabeln % ERRORLEVEL% . Dess värde är ett bekvämt sätt att komma åt din nuvarande errorlevel.

I följande exempel kör vi kommandot dir två gånger, en gång framgångsrikt och en gång utan framgång. Efter varje echo vi värdet på % ERRORLEVEL% .

 mkdir exempel 
 dir exempel 
 Katalog över 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 byte gratis 
 echo% ERRORLEVEL% 
 0 
 dir felstavade 
 Katalog över C: \ Users \ Hope-fil hittades inte 
 echo% ERRORLEVEL% 
 1 

Användar% ERRORLEVEL% i villkor

Du kan använda % ERRORLEVEL% i villkor, till exempel:

 om% ERRORLEVEL% NEQ 0 echo Errorlevel inte är lika med noll, misslyckades det sista kommandot. 

Tips: NEQ är relationsoperatören som betyder "inte lika med."

Obs!% ERRORLEVEL% är inte alltid korrekt

% ERRORLEVEL% är inte detsamma som om [ inte ] errorlevel, och de två värdena är inte alltid samma. Specifikt blir % ERRORLEVEL% inte alltid uppdaterad när felet ändras. För mer information, se detta MSDN-blogginlägg av Raymond Chen.

Av denna anledning, om du testar errorlevel i en produktionsmiljö, är det bättre att använda om [ inte ] errorlevel .

Felsökningsverktyg

För avancerade användare och mjukvaruutvecklare har Microsoft släppt ett kommandoradsfelsökningsverktyg, err.exe . Det låter dig söka efter felaktigheter efter nummer eller internt namn, och begränsa din sökning med rubrikfilen där errorlevel definieras.

 err /winerror.h 0 
 # winerror.h vald. # för hex 0x0 / decimal 0: ERROR_SUCCESS winerror.h # Funktionen slutfördes framgångsrikt. NO_ERROR winerror.h SEC_E_OK winerror.h S_OK winerror.h # 4 matchningar hittades för "0" 
 err / cmdmsg.h 9009 
 # cmdmsg.h vald. # för decimal 9009 / hex 0x2331: MSG_DIR_BAD_COMMAND_OR_FILE cmdmsg.h # '% 1' känns inte igen som ett internt eller externt kommando, # operativt program eller batchfil. # 1 matchningar hittades för "9009" 

Du kan ladda ner verktyget direkt från Microsoft.

Programmeringsvillkor