Batch Errorlevel abfragen

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

Wie mach ich’s richtig?

Danke und Gruß

Marcel

Hallo,

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:

if ERRORLEVEL 1 (echo Fehler) else (echo OK)


PHvL

Hallo,

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

if errorlevel 0 (echo 0 >> d:\xyz.log) else (echo 7 >> d:\xyz.log)

Wieso?

Danke und Gruß

Marcel

Hallo Marcel,

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)

Wieso?

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.

MfG Peter(TOO)

Mahlzeit,

du hast das noch nicht verstanden. Lies mal wieder:

„Bedingung ist erfüllt, wenn das zuletzt ausgeführte Programm
einen Code größer oder gleich der Nummer zurückgibt.“

if errorlevel 0 (echo 0 >> d:\xyz.log) else (echo 7 >> d:\xyz.log)

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\>

Gruß

Sancho

Hallo,

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.


PHvL

Moin Peter,

Kann schon sein, dass „net“ immer 0 zurückgibt weil da ein
fehler drin steckt.

Nö, „net“ ist schon richtig programmiert, aber ich habe falsch programmiert *g*
Besten Dank für die Unterstützung,
schönes Wochenende

Gruß

Marcel

Funktioniert!!!
Moin Sancho,
jaja, lesenden Menschen…

hab deine CMD getestet und dann für meine umgesetzt, siehe da es funktioniert, hatte mich irgendwie irgendwo verhaun.

Vielen Dank, damit komm ich endlich ein Stück weiter.

Schönes WE

Gruß

Marcel

Hallo,
wie auch immer,
mit dem Script von Sancho hab ich’s hinbekommen, und denke dank euch jetzt auch einigermaßen verstanden.

Vielen Dank für deine Mühe und Hilfe.

Ein schönes Wochenende

wünscht

Marcel