8

WScript.Shellを使用して外部プログラムを呼び出すことにより、WScript を使用していくつかのタスクを自動化しています。

ただし、現時点では、外部プログラムが終了するのを待たずに先に進みます。他のタスクが最初に終了することに依存するタスクがあるため、これは問題を引き起こします。

私は次のようなコードを使用しています:

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

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

シェル実行プログラムが戻るまでブロックするようにこれを行う方法はありますか?

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

最後の 2 つの引数は、ウィンドウの表示と実行のブロックです:)

于 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 に答える