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

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

Ausgedruckt am: 05.11.2024 um 12:11 Uhr

Biber
Biber 23.07.2009 um 16:14:30 Uhr
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
lobiwan
lobiwan 24.07.2009 um 08:08:27 Uhr
Goto Top
Tja, was soll ich sagen, FUNKTIONIERT !!!!
Manchmal sollte man(n) doch eher fragen.

Danke

Lobiwan