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-ID: 96247

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

Ausgedruckt am: 23.11.2024 um 02:11 Uhr

bastla
bastla 05.09.2008 um 19:37:38 Uhr
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
EasyEyeSystem
EasyEyeSystem 05.09.2008 um 20:12:44 Uhr
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
bastla
bastla 05.09.2008 um 20:36:42 Uhr
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
EasyEyeSystem
EasyEyeSystem 05.09.2008 um 20:38:36 Uhr
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