当前,出现脚本错误时,WScript会弹出消息框。 这些脚本由其他进程调用,并在服务器上运行,因此没有人可以关闭错误框。
我想要的是将错误消息转储到STDOUT,然后执行以返回调用过程。 弹出作为MSGBox只是挂了整个事情。
有想法吗?
这是应该运行脚本批处理作业的方式:
1
| cscript //b scriptname.vbs |
不要使用WScript。使用CScript。在Windows命令提示符下,键入以下内容以显示帮助。
我建议以下内容:
这将使CScript成为您的默认脚本解释器。 CScript可根据需要将消息打印到控制台(即stdout)。 (它不使用对话框窗口。)
您可能还想尝试// B开关,但是我不能确定是否必须按脚本运行。如果它像// H开关一样是持久的一次性开关,那么这可能对您有用;如果不是,则可能需要修改所有远程程序以包含它。从您提供的信息来看,我认为只需更改默认解释器(// H)即可完成您想要的操作。
您还需要添加某种错误处理,以防止脚本终止于错误。在Visual Basic Sc??ripting Edition中,如果只想忽略错误,最容易做的就是将以下内容添加到脚本顶部。
有关更多信息,请参见http://msdn.microsoft.com/zh-cn/library/53f3k80h(VS.85).aspx。
使用WScript.Echo代替MsgBox。并且还使用Cscript而不是Wscript运行脚本。
我建议您将脚本代码放在Sub中-例如DoWork-并对脚本进行编码,例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| On Error Resume Next
DoWork
If Err.Number <> 0 Then
If"CSCRIPT.EXE" = UCase( Right( WScript.Fullname, 11 ) ) Then
WScript.StdErr.Write Err.Number &":" & Err.Description
Else
WScript.Echo Err.Number &":" & Err.Description
End If
WScript.Quit 1
End If
Private Sub DoWork
... your code ...
End Sub |
这样,当您使用cscript //b运行脚本时,如果脚本失败,您将收到一条错误消息输出到stderr,并且调用者将收到一个非零的错误级别。
不要这样做:
vbscript:
On error resume next
english:
"when you have an error, ignore it & just keep going".
您尚未说明使用的语言。如果使用的是VBScript,则可以使用On Error ...语句编写错误处理程序。如果您使用的是JScript,则可以使用try {} catch(x){}块。