15.10 Exkurs zum Verständnis des Befehls
»if errorlevel Zahl«
 
Der Errorlevel liefert beim Tool ifmember.exe die Anzahl der Gruppen zurück, in denen der Anwender ein Mitglied ist. Der Befehl if errorlevel Zahl oder auch seine Negation if not errorlevel Zahl kann jedoch generell dazu genutzt werden, den Erfolg oder Misserfolg von Befehlen abzufragen. Sie können sich den erzeugten Errorlevel einmal anzeigen lassen, indem Sie dem Testuser folgendes Anmeldeskript zuweisen:
@echo off
\\s1\netlogon\util\ifmember.exe "Company\Verkauf" "Company\Einkauf"
echo %ERRORLEVEL%
pause
Machen Sie den Testuser zum Mitglied der Gruppen Verkauf und Einkauf und melden Sie sich unter der Kennung Testuser an. Bei der Abarbeitung des Anmeldeskriptes erhalten Sie die Meldung echo 2, weil Testuser Mitglied von beiden Gruppen ist. Entfernen Sie die Kennung Testuser aus der Gruppe Einkauf und melden Sie sich erneut unter Testuser an. Sie erhalten die Meldung echo 1. Ändern Sie das Anmeldeskript wie folgt ab:
@echo off
net use i: /d
\\s1\netlogon\util\ifmember.exe "Company\Verkauf"
echo %ERRORLEVEL%
if errorlevel 1 echo %USERNAME% ist Mitglied von Verkauf!
echo %ERRORLEVEL%
if errorlevel 1 net use I: \\s1\Verkauf
echo %ERRORLEVEL%
pause
Melden Sie sich wieder als Testuser an. Sie erhalten folgende Meldungen:
1
testuser ist Mitglied von Verkauf!
1
Der Befehl wurde erfolgreich ausgeführt!
0
Drücken Sie eine beliebige Taste...
Aus diesem Beispiel lernen Sie Folgendes: Da Testuser Mitglied von Verkauf ist, ist der Errorlevel zuerst gleich 1. Der Befehl echo %USERNAME% ist Mitglied von Verkauf! wird zwar fehlerlos durchgeführt, verändert aber den Wert des Errorlevels nicht. Der nachfolgende Befehl echo %ERRORLEVEL% zeigt einen unveränderten Errorlevel von 1 an. Der dann folgende Befehl if errorlevel 1 net use I: \\s1\Verkauf wird erfolgreich ausgeführt. Folglich ist danach der Wert des Errorlevels gleich 0. Mit der Abfrage des Errorlevels kann man also den Erfolg von Befehlen abfragen. Hätten Sie vergessen, das Verzeichnis Verkauf freizugeben, oder hätten Sie sich vertippt und statt if errorlevel 1 net use I: \\s1\Verkauf den Befehl if errorlevel 1 net use I: \\s1\Verkoff eingefügt, so würden Sie folgende Meldungen erhalten:
1
testuser ist Mitglied von Verkauf!
Systemfehler 53 aufgetreten.
Der Netzwerkpfad wurde nicht gefunden.
2
Drücken Sie eine beliebige Taste...
Sie können also mit der Abfrage des Errorlevels feststellen, ob Befehle erfolgreich abgearbeitet wurden. Wenn sie fehlerhaft abgearbeitet wurden, können Sie aufgrund des erzeugten Errorlevels alternative Schritte einleiten.
Im folgenden Beispiel führt der Befehl net use I: \\S1\Verkoff zu einem Errorlevel, der größer als 0 ist. Mittels der nachfolgenden echo-Befehle werden drei Meldungen auf dem Bildschirm erzeugt. Der Befehl echo mit angehängtem Punkt (echo.) erzeugt eine Leerzeile, damit die durch den Pause-Befehl erzeugte Aufforderung Drücken Sie eine beliebige Taste… von diesen Meldungen optisch getrennt wird. Sobald der Anwender dann eine Taste drückt, wird das Anmeldeskript mit dem Befehl exit an dieser Stelle beendet.
@echo off
net use I: /d
\\s1\netlogon\util\ifmember.exe "Company\Verkauf"
if errorlevel 1 net use I: \\S1\Verkuff
if not errorlevel 0 goto OKAY
echo Fehler in der Ausführung des Anmeldeskriptes
echo Melden Sie sich bei der Systemadministration!
echo Die weitere Abarbeitung des Anmeldeskriptes
echo wird abgebrochen.
echo.
pause
exit
:OKAY
echo Das Laufwerk I: wurde erfolgreich mit der Freigabe Verkauf verbunden.
pause
In obigem Beispiel hätte der Befehl if errorlevel 0 goto OKAY übrigens nicht das gewünschte Resultat erbracht. Nimmt nämlich der Errorlevel z.B. den Wert 2 an, so hat er gleichzeitig auch alle Werte unterhalb von 2, also den Wert 1 und den Wert 0. Dieses können Sie überprüfen, indem Sie das Beispiel-Anmeldeskript errorlevel.cmd testen:
@echo off
net use i: /del
\\s1\netlogon\util\ifmember "Company\Verkauf"
if errorlevel 1 net use I: \\s1\Verkoff
if errorlevel 2 echo Errorlevel hat den Wert 2
if errorlevel 1 echo Errorlevel hat aber auch den Wert 1
if errorlevel 0 echo Errorlevel hat aber auch den Wert 0
pause
Alle drei echo-Zeilen werden angezeigt. Wenn Sie jetzt »Verkoff« in »Verkauf« berichtigen und das Skript erneut durchlaufen lassen, wird nur noch die letzte echo-Zeile Errorlevel hat aber auch den Wert 0 angezeigt.
Die Auswertung des Erfolgs oder Misserfolgs von if errorlevel-Befehlen muss also sauber durchgetestet werden.
|