2008-09-08 81 views
6

我使用WScript通过使用WScript.Shell调用外部程序来自动执行一些任务。WScript.Shell并阻止执行?

但是,现在它不会等待外部程序完成,而是继续前进。这会导致问题,因为我有一些任务依赖于其他人先完成。

我使用这样的代码:

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

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

有没有办法做到这一点,因此阻塞,直到shell中执行程序的回报?

回答

5

如果使用“Exec”方法,它会返回一个引用,因此您可以轮询“状态”属性以确定它何时完成。下面是msdn样本:

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

Set oExec = WshShell.Exec(ZipCommand) 

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

使用Exec()而不是Run()的优点是,您也可以访问StdOut&StdErr。如果你不关心这一点,但是,Run()更简单。 – 2009-12-15 19:24:22

13

事实证明,虽然环是严重的CPU猪:P

我发现了一个更好的办法:

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

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

wshShell.Run ZipCommand,1,1 

最后两个参数是显示窗口和块执行:)