2008-09-08 8 views
6

J'utilise WScript pour automatiser certaines tâches, en utilisant WScript.Shell pour appeler des programmes externes.WScript.Shell et l'exécution de blocage?

Cependant, pour l'instant, il n'attend pas que le programme externe se termine et se déplace à la place. Cela cause des problèmes parce que j'ai certaines tâches dépendantes des autres qui terminent en premier.

J'utilise le code comme:

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

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

Est-il possible de le faire de sorte qu'il bloque jusqu'à ce que le shell exécuté programme retourne?

Répondre

5

Si vous utilisez la méthode "Exec", elle renvoie une référence, vous pouvez donc interroger la propriété "Status" pour déterminer quand elle est terminée. Voici un exemple de msdn:

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

Set oExec = WshShell.Exec(ZipCommand) 

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

Un avantage d'utiliser Exec() au lieu de Run() est que vous pouvez également accéder à StdOut & StdErr. Si cela ne vous intéresse pas, Run() est plus simple. –

13

fin de compte, que si la boucle est porc CPU grave: P

J'ai trouvé une meilleure façon:

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

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

wshShell.Run ZipCommand,1,1 

Les deux derniers arguments sont Afficher la fenêtre et l'exécution de bloc :)

Questions connexes