8

我正在使用WScript来自动化一些任务,方法是使用 WScript.Shell 调用外部程序。

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

我正在使用如下代码:

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

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

有没有办法做到这一点,所以它会阻塞,直到 shell 执行的程序返回?

4

2 回答 2

15

事实证明,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 :)

于 2008-09-08T19:14:50.110 回答
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
于 2008-09-08T18:44:13.333 回答