2008-09-08 28 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 

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

答えて

5

"Exec"メソッドを使用すると参照が返されるため、 "Status"プロパティをポーリングして、いつ完了したかを判断できます。ここでmsdnからのサンプルです:P

私はより良い方法を見つけた:

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

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

wshShell.Run ZipCommand,1,1 

最後の2つの引数を表示するウィンドウです

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

Set oExec = WshShell.Exec(ZipCommand) 

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

Run()の代わりにExec()を使用する利点は、StdOut&StdErrにもアクセスできることです。あなたがそれを気にしなければ、Run()は簡単です。 –

13

は、ループが深刻なCPUの豚である一方であること、が判明ブロックの実行:)

関連する問題