0

コードの一部を以下にまとめました。

    Option Explicit

    Dim oShell : Set oShell = WScript.CreateObject ("WScript.Shell")
    Dim FSO : set FSO = CreateObject("Scripting.FileSystemObject") 
    Dim StartTime,Elapsed 

    'msgBox(oShell.CurrentDirectory)
    'MsgBox(FSO.GetFile(Wscript.ScriptFullName).ParentFolder )
    oShell.CurrentDirectory = FSO.GetFile(Wscript.ScriptFullName).ParentFolder

    StartTime = Timer

    oShell.run "ParentChildLinkFinal.vbs", 1, True
    oShell.run "Parent_Child_Merge_final.vbs", 1, True
    oShell.run "CycleTime.vbs", 1, True
    oShell.run "Baddata.vbs", 1, True
    oShell.run "Matrixrefresh.vbs", 1, True

    Elapsed = Timer - StartTime

    MsgBox("Total time taken to finish this task:" & Elapsed & "in Seconds")

ここでの懸念事項の 1 つは、CycleTime.vbsファイルのいずれかでエラーが発生したとしますが、コントロールはファイルを強制終了Baddata.vbsせずに次のファイルに移動します。Main.vbsこれをどのように処理するか、エラーが発生した場合はmain.vbsそこ自体を停止するか、実行を実行させます。継続する。

ダニエルによると

"IF NOT oShell.run( "CycleTime.vbs", 1, True) = 0 then Wscript.Quit は、Main.vbs 内の "CycleTime.vbs" を呼び出すために現在使用している行を置き換えます。

IF oShell.run( "CycleTime.vbs", 1, True) = 99 then Wscript.Quit また、現在 "CycleTime.vbs" を呼び出すために使用している行を置き換えます。違いは、CycleTime.vbs がエラーになる方法を指定していないことです。実行時エラーが発生して実行が停止するような方法で失敗する可能性がある場合は、最初のオプションを使用することをお勧めします。エラー トラップでトラップするエラーが発生した場合は、コードで終了できます。WScript.Quit 99 のように。次に、提供した 2 番目のバージョンを使用して、スクリプトがそのコードで終了したかどうかを確認できます。最終的には、呼び出しているスクリプトの失敗をどのように処理するかにかかっています。」

そのようなアプローチの理由

@DanielTrueは、現在の .vbs が終了するまでスクリプトの実行を中断するのに役立ちます。main.vbsしかし、現在の .vbs が正常に完了したことを知るために、各 .vbs から特別な値を返すことができる場合、特別な値を探しています。次の .vbs を開始しましょう。しかし、そうです、成功さえすれば次のことが始まります。現在、.vbs のいずれかからエラーが発生したと仮定して、エラー ウィンドウを閉じるとすぐに、次のスクリプトの実行が開始されました。だから私は、成功した完全なコミュニケーションがに送られるかどうか、少なくとも考えようとしていmain.vbsます。それで、それは可能ですか?

4

2 に答える 2

2

Hiten が示した内容を拡張するには、呼び出された .vbs ファイルからの戻り値について Main.vbs でいくつかのチェックを行う必要があります。これを行うには、 Runの戻り値を利用します。

例えば:

oShell.run "CycleTime.vbs", 1, Trueする代わりに

IF NOT oShell.run( "CycleTime.vbs", 1, True) = 0 then Wscript.Quit

CycleTime.vbs実行時エラーが原因で停止した場合、これは現在の実行スレッドを終了します(スクリプトを実行するための呼び出しは false を返します)。

CycleTime.vbs 内でエラーを適切に処理できる場合はWscript.Quit code、他の回答で説明されているように、閉じるときにメッセージを送信できます。

そのため、CycleTime.vbs でエラーを適切に処理したい場合でも、エラーが発生したことを示すことができます。次のようなコードを使用して、メイン スクリプトのリターン コードを確認するだけです。

IF oShell.run( "CycleTime.vbs", 1, True) = 99 then Wscript.Quit

このように、スクリプトはCycleTime.vbsコード 99 で終了すると終了します。これは、CycleTime.vbs 内に次のようなコードがある場合に発生します。

If err then
    'Exit script with code 99 to indicate an error occurred.
    Wscript.Quit 99
End if
于 2012-12-31T21:52:53.030 に答える
1

main.vbs で vbscript エラー処理を使用してコードを停止し、main.vbs を終了します。

詳細については、次のリンクをクリックしてください: VBScript -- エラー処理の使用

サンプル:

On Error Resume myErrCatch
'Do step 1
'Do step 2
'Do step 3

myErrCatch:
'log error
Resume Next

.VBS からExist コードを作成し、Main.vbs を終了します。

DIM returnValue
 returnValue = 99
 WScript.Quit(returnValue)
于 2012-12-31T14:12:28.497 に答える