Hallo,
über ein Script weise ich mir Netzlaufwerke zu,
nun möchte ich in einer Log-Datei eintragen ob die Zuweisung
geklappt hat oder nicht.
Code:
echo Zuweisung des Verzeichnisses >> d:\xyz.log
net use v: \server\daten
Nun soll in der Log aber nicht „Befehl erfolgreich ausgeführt“ stehen, sondern ein eigener Text.
Folgende Abfrage trägt aber sowohl das Ergebis von Errorlevel 1 und 0 in die Log-Datei:
if errorlevel 1 echo [FEHLER] - Verzeichnis konnte nicht zugewiesen werden >> d:\xyz.log
if errorlevel 0 echo [OK] - Verzeichnis zugewiesen >> d:\xyz.log
Folgende Abfrage trägt aber sowohl das Ergebis von Errorlevel
1 und 0 in die Log-Datei:
if errorlevel 1 echo [FEHLER] - Verzeichnis konnte nicht
zugewiesen werden >> d:\xyz.log
if errorlevel 0 echo [OK] - Verzeichnis zugewiesen >>
d:\xyz.log
das ist richtig, da gemäß Dokumentation (z.B. help if):
„Bedingung ist erfüllt, wenn das zuletzt ausgeführte Programm einen Code größer oder gleich der Nummer zurückgibt.“
In diesem einfachen Fall würde z.B. eine ELSE-Klausel genügen:
das ist richtig, da gemäß Dokumentation (z.B. help if):
„Bedingung ist erfüllt, wenn das zuletzt ausgeführte Programm
einen Code größer oder gleich der Nummer zurückgibt.“
OK, Prinzip habe ich wohl verstanden, aber:
if a==v (echo 0 >> d:\xyz.log) else (echo 7 >> d:\xyz.log)
liefert mir eine 7, logisch,
mache ich nun einen net use befehl bekomme ich aber immer eine 0 als Ergebnis, egal ob ide Zuweisung funktioniert oder nicht
Im Prinzip ist „errorlevel“ ein Wert welcher ein Programm nach beendigung an das Betriebssystem zurückgibt.
Der Programmierer muss also beim beenden seines Programms diesen Wert berechnen.
Kann schon sein, dass „net“ immer 0 zurückgibt weil da ein fehler drin steckt.
Weil jeder Fehler auch die Bedingung „if errorlevel 0“ erfüllt - es ist größer oder gleich 0.
Teste folgende test.cmd:
@echo off
net use z: %1
if errorlevel 1 goto fehler
echo kein Fehler
goto :eof
> fehler
echo FEHLER!!!
Folgende Ausgabe wird bei mir erzeugt:
C:\Temp\>test1.cmd \\127.0.0.1\f$
Systemfehler 67 aufgetreten.
Der Netzwerkname wurde nicht gefunden.
FEHLER!!!
C:\Temp\>test1.cmd \\127.0.0.1\c$
Der Befehl wurde erfolgreich ausgeführt.
kein Fehler
D:\Temp\>
das ist richtig, da gemäß Dokumentation (z.B. help if):
„Bedingung ist erfüllt, wenn das zuletzt ausgeführte Programm
einen Code größer oder gleich der Nummer zurückgibt.“
OK, Prinzip habe ich wohl verstanden, aber:
if a==v (echo 0 >> d:\xyz.log) else (echo 7 >>
d:\xyz.log)
liefert mir eine 7, logisch,
das ist ein völlig anderer IF-Befehl, um dieses Verhalten auch bei ERRORLEVEL zu haben, müsstest du den Fehlercode aus einer Umgebungsvariablen lesen. Falls keine Umgebungsvariable mit dem Namen ERRORLEVEL definiert ist, geht das mit %ERRORLEVEL%:
if %ERRORLEVEL%==0 (echo 0) else (echo 7)
mache ich nun einen net use befehl bekomme ich aber immer eine
0 als Ergebnis, egal ob ide Zuweisung funktioniert oder nicht
if errorlevel 0 (echo 0 >> d:\xyz.log) else (echo 7
>> d:\xyz.log)
Sicher, weil das dem IF-Befehl
if %ERRORLEVEL% GEQ 0 (echo 0) else (echo 7)
entspricht. Deshalb hatte ich ja ERRORLEVEL gegen 1 geprüft.