2008-09-08 8 views
6

Ich verwende WScript, um einige Aufgaben zu automatisieren, indem ich mit WScript.Shell externe Programme aufruft.WScript.Shell und blockierende Ausführung?

Im Moment wartet es jedoch nicht auf das Beenden des externen Programms und fährt stattdessen fort. Dies führt zu Problemen, da einige Aufgaben davon abhängig sind, dass andere zuerst fertig sind.

Ich verwende Code wie:

ZipCommand = "7za.exe a -r -y " & ZipDest & BuildLabel & ".zip " & buildSourceDir 

Set wshShell = WScript.CreateObject("Wscript.Shell") 
wshShell.run ZipCommand 

Gibt es eine Möglichkeit, dies zu tun, so dass es blockiert, bis die Shell ausgeführt Programm kehrt?

Antwort

5

Wenn Sie die "Exec" -Methode verwenden, wird eine Referenz zurückgegeben, sodass Sie die Eigenschaft "Status" abfragen können, um festzustellen, wann sie abgeschlossen ist. Hier ist ein Beispiel von msdn:

Dim WshShell, oExec 
Set WshShell = CreateObject("WScript.Shell") 

Set oExec = WshShell.Exec(ZipCommand) 

Do While oExec.Status = 0 
    WScript.Sleep 100 
Loop 
+3

Ein Vorteil der Verwendung von Exec() anstelle von Run() ist, dass Sie auch auf StdOut & StdErr zugreifen können. Wenn Sie das nicht interessiert, ist Run() einfacher. –

13

Es stellte sich heraus, dass während Schleife schwere CPU hog: P

ich einen besseren Weg gefunden:

ZipCommand = "7za.exe a -r -y " & ZipDest & BuildLabel & ".zip " & buildSourceDir 

Set wshShell = WScript.CreateObject("Wscript.Shell") 

wshShell.Run ZipCommand,1,1 

Die letzten beiden Argumente sind zeigen Fenster und Blockausführung :)

Verwandte Themen