goodbytes
Goto Top

Vbs - Batch starten und nach Timeout Batch beenden

Hallo,
durch ein vbs-Script wird eine Batch gestartet. Das Script wartet und macht danach weiter.
Wenn aber mal ein Fehler auftritt und die Batch hängt wartet das Script natürlich ewig. Wie kann ich da ein Timeout reinbringen, das nach einer bestimmten Laufzeit der Batch versucht es "abzuschießen" und weiter geht?

So starte ich die Batch:
oShell.Run "C:\Windows\System32\cmd.exe /c " & "D:\MeineBatch.cmd", 0, vbTrue  

Gruß
Torsten

Content-ID: 272558

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

Ausgedruckt am: 25.11.2024 um 04:11 Uhr

colinardo
Lösung colinardo 21.05.2015 aktualisiert um 14:47:49 Uhr
Goto Top
Hallo Torsten,
kannst du z.B. so machen:
Set objShell = CreateObject("Wscript.Shell")  

' Timeout in Sekunden  
intTimeout = 120

'Startzeit festhalten  
dStart = Now()
'Befehl ausführen  
Set oExec = objShell.Exec("cmd /c ping -t localhost")  

'Warte darauf das der Befehl beendet wurde oder der Timeout abgelaufen ist  
Do While oExec.Status = 0 And (Now() < DateAdd("s",intTimeout,dStart))  
     WScript.Sleep 100
Loop
'Wenn Prozess nach Timeout immer noch läuft, abschießen  
If oExec.Status = 0 Then
	oExec.Terminate
End If
oder auch mit Powershell ein Einzeiler:
powershell -ExecutionPolicy ByPass -Command "&{$proc = Start-Process 'C:\DeineBatch.cmd' -PassThru; $proc | Wait-Process -Timeout 120 -EA SilentlyContinue; kill $proc -EA SilentlyContinue}"  
Grüße Uwe
goodbytes
goodbytes 21.05.2015 um 14:48:19 Uhr
Goto Top
Hallo Uwe,
funktioniert bestens, vielen Dank !!! face-smile

Gruß
Torsten
goodbytes
goodbytes 21.05.2015 um 14:49:10 Uhr
Goto Top
Mit der Powershell ist es natürlich sehr kompakt, aber ich wollte es gerne mit vbs machen.
Danke!