Function 处理带有单个消息的重复返回值

Function 处理带有单个消息的重复返回值,function,vbscript,return-value,Function,Vbscript,Return Value,我有这段代码,它非常适合我,只要运行一个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: " &a

我有这段代码,它非常适合我,只要运行一个
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变量唯一,例如
retval1
retval2
retval3
重复[If..Then..Else]语句,但这感觉很笨拙,可能不是最好的方法

对我来说,最好的方法是使用
MsgBox
显示每个
objShell.Run
行的“报告”。除非所有行都成功,否则一个
MsgBox“all done”
就可以了


我需要从哪个方向开始搜索?函数、数组?

我从未使用过对象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
”->初始化
SequenceSteps=3
Result=“”
ErrString=“”
MyCommand序列(0)=“cmd/c标题阶段1和机器人副本c:\this c:\that/MIR/L”
MyCommand序列(1)=“cmd/c标题第二阶段和机器人副本c:\thistoo c:\thattoo/MIR/L”
MyCommand序列(2)=“cmd/c标题第三阶段和机器人副本c:\和此c:\和/MIR/L”
“->过程
错误发生=错误
对于Counta=0,请按顺序执行步骤-1
设置objShell=WScript.CreateObject(“WScript.Shell”)
retval=objShell.Run(MyCommandSequence(Counta),1,True)
'->处理请求结果
如果retval<0,则
ErrString=“cmd中止,返回值为:”&retval
“**新代码行**
退出
ElseIf retval>7则
ErrString=“robocopy错误,返回值为:”&retval
“**新代码行**
退出
其他的
结果=结果和“机器人复制成功”,返回值为:“&retval&vbcrlf”
如果结束
下一个
'->相应地显示
如果Trim(ErrString)“,则
MsgBox结果&vbcrlf&ErrString
其他的
MsgBox“全部完成”
如果结束
更新
重新编辑的代码

当前脚本在“MyCommandSequence”上出现类型不匹配错误,我不明白为什么.MyCommandSequence没有声明为数组,所以我添加了
Dim MyCommandSequence(3)
来声明大小为3的数组是的,如果使用VB,您必须在使用数组之前声明它。。。。就像在朦胧中。。。。如果这对您有帮助,请将其标记为答案。谢谢,祝你好运…不幸的是,这不是我想要的。对于当前代码,我不知道哪个阶段以哪个错误级别退出,并且在关闭cmd时它不会返回
<0
值。我添加了EXIT FOR,以在出现错误时退出FOR下一个循环,希望这能帮助您找到程序被炸出的位置。
'-> 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