easyeyesystem
Goto Top

Wie bekommt man einen Rückgabewert von einer Batchdatei in das VBScript - 2

Hallo leider ist der Beitrag der meine Lösung zu 95% enthält bereits als gelöst makiert.

Deshalb eröffne ich einen neuen Beitrag um meine Frage zu ergänzen.

Thread: Wie bekommt man einen Rückgabewert von einer Batchdatei in das VBScript

Aktuelle Situation:
run.vbs
	Set Runobject = WScript.CreateObject("WScript.Shell")  
	Runkey = Runobject.Run ("map.bat" ,3, true)  
	Wscript.Echo Runkey
	If Runkey = 0 Then
		Wscript.Echo Runkey & " OK "  
	Else
		Wscript.Echo Runkey & " ERROR"  
	End If
map.bat -1
ping 123.2.2.1 -n 1
ping 127.0.0.1 -n 1
map.bat - 2
ping 127.0.0.1 -n 1
ping 123.2.2.1 -n 1

So nun mein Problem. Ich brache in einem VBS Script den Rückgabewert einer Batchdatei.

Leider gibt dieser nur den errorlevel des letzten Befehles zurück. (map.bat -1 geht _ map.bat -2 geht nicht)

Gibt es irgendeine Möglichkeit die Errorlevel hochzuzählen?

Evtl. ein Ansatz:
nach jedem Befehl if not %errorlevel% == 0 set /a error = %error% + 1

Habt ihr eine Lösung für mein Problem?

Content-Key: 96247

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

Printed on: April 25, 2024 at 19:04 o'clock

Member: bastla
bastla Sep 05, 2008 at 17:37:38 (UTC)
Goto Top
Hallo EasyEyeSystem!

Ein
set /a error=0
...
if errorlevel 1 set /a error+=1
...
exit /b %error%
sollte funktionieren - falls Du aber gar nicht die Anzahl der Fehler wissen willst, sondern nur festgehalten werden soll, dass überhaupt mindestens 1 Fehler aufgetreten ist, kannst Du folgende Variante (die auch ohne "delayedExpansion" in einer "for"-Schleife funktioniert) verwenden:
set error=0
...
if errorlevel 1 set error=1
...
exit /b %error%
Soferne das verwendete BS (auf beiden Seiten) zumindest XP ist, ließe sich der Umweg über Batch auch ganz vermeiden: http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept04/he ...

Grüße
bastla
Member: EasyEyeSystem
EasyEyeSystem Sep 05, 2008 at 18:12:44 (UTC)
Goto Top
Zitat von @bastla:
Hallo EasyEyeSystem!

Ein
set /a error=0
> ...
> if errorlevel 1 set /a error+=1
> ...
> exit /b %error%
> 
sollte funktionieren - falls Du aber gar nicht die
Anzahl der Fehler wissen willst, sondern nur
festgehalten werden soll, dass überhaupt mindestens 1 Fehler
aufgetreten ist, kannst Du folgende Variante (die auch ohne
"delayedExpansion" in einer "for"-Schleife
funktioniert) verwenden:
set error=0
> ...
> if errorlevel 1 set error=1
> ...
> exit /b %error%
> 
Soferne das verwendete BS (auf beiden Seiten) zumindest XP ist,
ließe sich der Umweg über Batch auch ganz vermeiden:
http://www.microsoft.com/technet/scriptcenter/resources/qanda/sept04/he ...

Grüße
bastla

Hi Bastla
Hab es ausporbiert. In meiner Zusammenstellung geht es leider nicht.

Code:
datei.vbs
	Set Runobject = WScript.CreateObject("WScript.Shell")  
	Runkey = Runobject.Run ("map.bat" ,1, true)  
	If Runkey = 0 Then
		Wscript.Echo Runkey & " OK "  
	Else
		Wscript.Echo Runkey & " ERROR"  
	End If
map.bat
exit /B 2

Bekomme jedoch als Exit code immer 0.

Wenn ich das aber in nem CMD Fenster mache geht es also warscheinlich liegt es an dem VBS Code

Grüße
EasyEyeSystems
Member: bastla
bastla Sep 05, 2008 at 18:36:42 (UTC)
Goto Top
Hallo EasyEyeSystem!

Lass die Option "/B" weg (es soll ja hier ohnehin die vom Script aufgerufene CMD-Shell und nicht nur der Batch beendet werden).

Grüße
bastla
Member: EasyEyeSystem
EasyEyeSystem Sep 05, 2008 at 18:38:36 (UTC)
Goto Top
Zitat von @bastla:
Hallo EasyEyeSystem!

Lass die Option "/B" weg (es soll ja hier ohnehin die vom
Script aufgerufene CMD-Shell und nicht nur der Batch beendet werden).

Grüße
bastla
hi,

danke bastla hast mir mal wieder geholen. Schönen Abend noch

Grüße
Franz