lobiwan
Goto Top

ExitCode eines .VBS nicht richtig wenn ich es aus einem Batch aufrufe ...

Also, ich möchte aus einer Batchdatei ein VB-Script aufrufen der nachschaut ob ein PCI-Device vorhanden ist und wenn dann mit einem Exitcode 0 beendet wird sonst 1.

Das Ergebnis möchte ich dann im einer Batchdatei via "If Errorlevel ..." verwerten.
Nun ist das eigenartige, das erst beim zweiten aufruf des Scripts der richtige Exitcode in der Errorlevel Variable steht !?

Vorgehen:
Ich nehme dazu erstmal eine Kommandozeile und rufe mein Script mit:

cscript meinscript.vbs VendorID DeviceID & Echo %Errorlevel%

auf, aber erst ab dem zweiten mal aufrufen kommt die "richtige" Antwort.
Ist wahrscheinlich nur irgendwo ne kleinigkeit aber ich seh die nicht ;-(


Hier mein bisheriger Code ...
Option Explicit
Dim exitcode
exitcode=1
' Check argument count  
If WScript.Arguments.Count < 2 Then
	MsgBox "Missing Arguments !" & VbCrLf & VbCrLf & Wscript.ScriptName & " VendorID DeviceID" & VbCrLf & VbCrLf & Wscript.ScriptName & " 8086 2592", 16, "Error"  
	exitcode=2
	Wscript.Quit(exitcode)
End If
' Check argument lenght  
If not Len(Wscript.Arguments(0))=4 Then 
	MsgBox " VendorID must be 4 digits !!! ", 16, "Error"	  
	exitcode=2
	Wscript.Quit(exitcode)
End If
If not Len(Wscript.Arguments(1))=4 Then 
	MsgBox " DeviceID must be 4 digits !!! ", 16, "Error"  
	exitcode=2
	Wscript.Quit(exitcode)
End If

Dim buses,bus,device,devices,strVendor2Search,strDevice2Search
Set buses = GetObject("winmgmts:").InstancesOf("Win32_Bus")  
strVendor2Search = "VEN_" & Wscript.Arguments(0)  
strDevice2Search = "DEV_" & Wscript.Arguments(1)  
For Each bus In buses
    Set devices = GetObject("winmgmts:").ExecQuery ("Associators of {Win32_Bus.DeviceID=""" & bus.DeviceID & """} WHERE AssocClass = Win32_DeviceBus")  
    For Each device In devices
		If InStr(UCase(device.PnPDeviceID),strVendor2Search) Then
			If InStr(UCase(device.PnPDeviceID),strDevice2Search) Then
				WScript.Echo "  ", device.name  
				WScript.Echo vbTab, device.PnPDeviceID
				WScript.Echo " "  
				exitcode=0
			End IF
		End IF
    Next
Next 
Wscript.Quit(exitcode)

Content-Key: 121184

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

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

Member: Biber
Biber Jul 23, 2009 at 14:14:30 (UTC)
Goto Top
Moin lobiwan,

schreibe in der Batchdatei statt...
cscript meinscript.vbs VendorID DeviceID & Echo %Errorlevel%
... jetzt zweizeilig:
cscript meinscript.vbs VendorID DeviceID 
Echo %Errorlevel%

Wenn Du es in einer Zeile mit "&" verknüpft schreibst, wird der %Errorlevel% ausgegeben, der gesetzt war,
als die CMD.exe sich diese Zeile zum parsen, interpretieren und letzendlich ausführen geladen hat.
Also somit auch, bevor der CScript-Schlenker ausgeführt wurde.

Grüße
Biber
Member: lobiwan
lobiwan Jul 24, 2009 at 06:08:27 (UTC)
Goto Top
Tja, was soll ich sagen, FUNKTIONIERT !!!!
Manchmal sollte man(n) doch eher fragen.

Danke

Lobiwan