2017-06-08 5 views
0

objShell.Runという行を1つだけ実行すると、このコードは私には完璧に機能します。私は複数のobjShell.Runラインを持っているしたい場合個々のメッセージで返り値を返すように処理する

Set objShell = WScript.CreateObject("WScript.Shell") 

retval = objShell.Run ("cmd /c title Phase 1 & robocopy C:\this C:\that /MIR /L",1,True) 

If retval < 0 Then 
    MsgBox "cmd aborted, return value is: " & retval 
ElseIf retval > 7 Then 
    MsgBox "robocopy error, return value is: " & retval 
Else 
    MsgBox "robocopy successful, return value is: " & retval 
End If 

どのように私は、行く必要があるでしょうか? など。

retval = objShell.Run ("cmd /c title Phase 1 & robocopy C:\this C:\that /MIR /L",1,True) 
retval = objShell.Run ("cmd /c title Phase 2 & robocopy C:\thistoo C:\thattoo /MIR /L",1,True) 
retval = objShell.Run ("cmd /c title Phase 3 & robocopy C:\andthis C:\andthat /MIR /L",1,True) 

私はそれぞれのretval変数を一意にすることができます。 retval1retval2retval3 [If..Then..Else]ステートメントを繰り返しますが、それは鈍い感じで、おそらく最も良い方法ではありません。

私にとって、最も良い方法は、完了したときに、個々のobjShell.Run行についての "レポート"を表示するMsgBoxです。すべてのラインが成功した場合を除いて、MsgBox "all done"はうまくいくでしょう。

検索の開始方法はどちらですか?関数、配列?

答えて

1

私は、WScript.Shell

をそのオブジェクトを使用したことがありませんが、あなたのコード、サンプルと説明を見ていただきました。 これはあなたが意味するものだと思いますか?

'-> Initialise 
SequenceSteps = 3 
Result = "" 
ErrString = "" 
MyCommandSequence(0) = "cmd /c title Phase 1 & robocopy C:\this C:\that /MIR /L" 
MyCommandSequence(1) = "cmd /c title Phase 2 & robocopy C:\thistoo C:\thattoo /MIR /L" 
MyCommandSequence(2) = "cmd /c title Phase 3 & robocopy C:\andthis C:\andthat /MIR /L" 

'-> Process 
ErrorOccurred = False 
For Counta = 0 To SequenceSteps - 1 
    Set objShell = WScript.CreateObject("WScript.Shell") 
    retval = objShell.Run (MyCommandSequence(Counta), 1, True) 
    '-> process request result 
    If retval < 0 Then 
     ErrString = "cmd aborted, return value is: " & retval 
     '** NEW CODE LINE ** 
     Exit For 
    ElseIf retval > 7 Then 
     ErrString = "robocopy error, return value is: " & retval 
     '** NEW CODE LINE ** 
     Exit For 
    Else 
     Result = Result & "robocopy successful, return value is: " & retval & vbcrlf 
    End If 
Next 
'-> Display Accordingly 
If Trim(ErrString) <> "" Then 
    MsgBox Result & vbcrlf & ErrString 
Else 
    MsgBox "All Done" 
End if 

UPDATE

再編集コード

+0

現在のスクリプトが 'MyCommandSequence' に関する型の不一致エラーを与える、なぜ理解していません。 – WatskeBart

+0

MyCommandSequenceは配列として宣言されていないので、Dim MyCommandSequence(3)を追加して、3のサイズの配列を宣言しました。 – WatskeBart

+0

VBを使用している場合、使用する前に配列を宣言する必要はありませんそれは.... DIMのように....これがあなたに役立つなら、答えとしてマークしてください。ありがとうn幸運... – Zeddy

関連する問題