我正在使用WScript来自动执行某些任务,方法是使用WScript.Shell调用外部程序。
但是,现在它不会等待外部程序完成,而是继续前进。这会导致问题,因为我有一些任务依赖于其他人首先完成。
我使用的代码如下:
ZipCommand = "7za.exe a -r -y " & ZipDest & BuildLabel & ".zip " & buildSourceDir
Set wshShell = WScript.CreateObject("Wscript.Shell")
wshShell.run ZipCommand
有没有办法这样做,所以它会阻塞,直到shell执行程序返回?
答案 0 :(得分:14)
事实证明,while循环是严重的CPU占用:P
我找到了一个更好的方法:
ZipCommand = "7za.exe a -r -y " & ZipDest & BuildLabel & ".zip " & buildSourceDir
Set wshShell = WScript.CreateObject("Wscript.Shell")
wshShell.Run ZipCommand,1,1
最后两个参数是Show window和Block Execution:)
答案 1 :(得分:7)
如果使用“Exec”方法,它将返回一个引用,因此您可以轮询“Status”属性以确定它何时完成。以下是msdn的示例:
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec(ZipCommand)
Do While oExec.Status = 0
WScript.Sleep 100
Loop