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