gismo82
Goto Top

Wie BATCH ERRORLEVEL ignorieren

Hallo,

in einem Batch-Skript habe ich nach folgender Anleitung Echo ohne Zeilenumbruch und ähnliche Spielereien folgendes Codesegment benutzt:
set /p =Mounting network drive...<NUL
if %testVar%==0 (
    echo done
) else (
    echo failed
)

Das Netzlaufwerk wird ordnungsgemäß eingehangen, also testvar ist auf 0 gesetzt.

Ausgabe:
Mounting network drive...done

Leider liefert der Befehl
set /p =Mounting network drive...<NUL
als errorlevel 1 zurück, welches dann im ganzen Script auf 1 gesetzt bleibt, ungeachtet weiterer foglender erfolgreicher Befehle

Wie kann ich umgehen, dass dieser Befehl das Errorlevel 1 zurückgibt?


Gruß Andreas

Content-Key: 128512

Url: https://administrator.de/contentid/128512

Printed on: April 23, 2024 at 20:04 o'clock

Member: Farbauti
Farbauti Nov 03, 2009 at 10:37:41 (UTC)
Goto Top
Hmmm, ich sehe in deinem Code leider weder ein NET USE, noch die Abfrage des ERRORLEVELs.

Vielleicht beschreibst du einfach mal in Prosa, was du eigentlich willst...

Gruß, Farbauti.
Member: gismo82
gismo82 Nov 03, 2009 at 10:47:37 (UTC)
Goto Top
Dies ist ja nur ein Auszug aus meinem Skript. Das NET USE steht ganz am Anfang. Und liefert auch das richtige ERRORLEVEL 0 zurück.

Hier nochmal mein Script mit NET USE
@echo off
	net use * \\seetxxnas01.txx.seeburger.de\dataWarehouseImportFolder\GTSProcessList >NUL
	echo NET USE Errorlevel = %errorlevel%
	
	if %errorlevel%==0 (
		set testVar=0
	) else (
		set testVar=1
	)
	echo testVar = %testVar%
	
	set /p =Mounting network drive...<NUL 

	if %testVar%==0 ( 
		echo done 
	) else ( 
		echo failed 
	)
	
	echo Errorlevel nach SET Befehl = %errorlevel%

Ausgabe:
NET USE Errorlevel = 0
testVar = 0
Mounting network drive... done
Errorlevel nach SET Befehl = 1

Diese Zeile "Mounting network drive...done" ist die Ausgabe ob es erfolgreich war.
Member: bastla
bastla Nov 03, 2009 at 10:54:46 (UTC)
Goto Top
Hallo gismo82!

Soferne Du tatsächlich die Variable %testVar% später noch benötigen solltest, dürfte aber trotzdem
@echo off & setlocal
net use * \\seetxxnas01.txx.seeburger.de\dataWarehouseImportFolder\GTSProcessList >NUL
set testVar=%errorlevel%
if %testVar%==0 (
	echo Mounting network drive...done
) else (
	echo Mounting network drive...failed
)
genügen ...

... ansonsten aber vielleicht auch schon
net use * \\seetxxnas01.txx.seeburger.de\dataWarehouseImportFolder\GTSProcessList >NUL && (echo Mounting network drive...done) || (echo Mounting network drive...failed)
Grüße
bastla
Member: gismo82
gismo82 Nov 03, 2009 at 11:53:45 (UTC)
Goto Top
Wäre halt schöner gewesen, wenn die Ausgabe zur Laufzeit ausgegeben würde...

Mich würde auch einmal interresieren, ob überhaupt möglich ist, das ERRORLEVEL zu ignorieren
Member: Farbauti
Farbauti Nov 03, 2009 at 12:02:41 (UTC)
Goto Top
Zitat von @gismo82:
Wäre halt schöner gewesen, wenn die Ausgabe zur Laufzeit
ausgegeben würde...

Mich würde auch einmal interresieren, ob überhaupt
möglich ist, das ERRORLEVEL zu ignorieren

Die Ausgabe wird doch zur Laufzeit ausgegeben. Was meinst du genau?
Und der Errorlevel hat prinzipiell keine Auswirkung auf nachfolgende Befehle; es sei denn, du fragst ihn aktiv ab.


Gruß, Farbauti.
Member: miniversum
miniversum Nov 03, 2009 at 12:11:50 (UTC)
Goto Top
warum nicht so?
set errorlevel=0
Member: gismo82
gismo82 Nov 03, 2009 at 12:13:19 (UTC)
Goto Top
weil set errorlevel=0 das errorlevel IMMER auf 0 setzt, egal was danach passiert. Dies gilt dann für die ganze Session.

Das ist nicht gut. Vielleicht gibts da ja andere Möglichkeiten.

[EDIT:] Zur Laufzeit meine ich:
Bevor mein Befehl (Microsoft Logparser in meinem Fall) ausgeführt wird, dann soll
Executing Logparser...
ausgegeben werden. Wenn der LogParser erfolgreich gearbeitet hat, dann soll
done bzw. failed
angehangen werden.
Member: Farbauti
Farbauti Nov 03, 2009 at 12:57:52 (UTC)
Goto Top
Zitat von @gismo82:
[EDIT:] Zur Laufzeit meine ich:
Bevor mein Befehl (Microsoft Logparser in meinem Fall) ausgeführt wird...

Wenn dir das so wichtig ist, dann halt so:
set /p =Mounting network drive...<NUL
net use * \\seetxxnas01.txx.seeburger.de\dataWarehouseImportFolder\GTSProcessList >NUL && (echo done) || (echo failed)
Member: Biber
Biber Nov 03, 2009 at 13:21:06 (UTC)
Goto Top
@Farbauti

<Erbsenzählermode>
wobei deine Variante in einem Fall zu "jahrelang gar nichts" führt...
Wenn für das net use eine Eingabe erwartet wird (Benutzername/Passwort), dann wird die "Eingabeaufforderung" unterdrückt, niemand sieht etwas und weder "echo DONE" noch && "echo In die Grütze" wird jemals erreicht.
</Erbsenzählermode>

Grüße
Biber
Member: gismo82
gismo82 Nov 03, 2009 at 13:30:13 (UTC)
Goto Top
Hi...

aber ich muss jetzt einfach nochmal fragen...

Gibt es keine Möglichkiet, das Errorlevel zu ignorieren, bzw. auf 0 zu setzen? Denn, wenn bei diesem SET das Errorlevel auf 1 gesetzt wird, dann bleibt das immer auf 1

Gruß Andreas
Member: Biber
Biber Nov 03, 2009 at 13:59:32 (UTC)
Goto Top
Moin gismo82,

Gibt es keine Möglichkiet, das Errorlevel zu ignorieren, bzw. auf 0 zu setzen?
Doch, natürlich.
Eigentlich jeder interne/externe Befehl setzt den Errorlevel auf 0 = Alles prima, wenn er erfolgreich und planmäßig zu einem ende kommt.

Allerdings ist der SET-Befehl eine Ausnahme dieser Regel.

Wenn du WTF-auch-immer das Errorlevel innerhalb des Batchschnipsels auf 0 setzen willst/musst/möchtest:
REM ein CD zeigt das aktuelle Verzeichnis an UND setzt das Errotlevel auf 0. Da kann nix schiefgehen. Eigentlich.
cd >nul
echo Errorlevel ist: %Errorlevel% nach einem Befehl "CD ohne Parameter"  

Wenn du ein ERRORLEVEL 0 nach außen transportieren willst (Rückgabewert des batches an ein aufrufendes Programm):
Verwende "EXIT /B xx" mit xx als deinem gewünschten Rückgabewert.
Siehe Hilfe "Exit /?" am CMD-Prompt.

Grüße
Biber
Member: Farbauti
Farbauti Nov 03, 2009 at 14:02:14 (UTC)
Goto Top
Zitat von @Biber:
@Farbauti

<Erbsenzählermode>
wobei deine Variante in einem Fall zu "jahrelang gar nichts" führt...

Du bist ja lustig.
Wenn du alle Posts gelesen hättest, hättest du gemerkt, dass ich das auch nur überbommen habe, und es nicht meine Variante ist face-wink
Member: Biber
Biber Nov 03, 2009 at 14:38:54 (UTC)
Goto Top
@Farbauti

...und es nicht meine Variante ist
Es sind doch immer die Boten, die geköpft werden.... *gg

Grüße
Biber
Member: Biber
Biber Nov 12, 2009 at 14:09:30 (UTC)
Goto Top
Moin gismo82,

ich hatte neulich schon per PN bei dir nachgefragt:

Wie ist denn der Status deiner Frage?
Hinreichend beantwortet? Fragen offen? Gegenstandslos aufgrund einer unverhofften Erbschaft?

Bitte entweder abhaken oder nachhaken.

Danke
Biber
Member: gismo82
gismo82 Nov 12, 2009 at 15:20:37 (UTC)
Goto Top
Sorry,

hatte das total vergessen...ist erledigt. Hat mir weitergeholfen. Danke

Gruß...