关于vbscript:CScript / WScript防止错误被阻止

关于vbscript:CScript / WScript防止错误被阻止

CScript/WScript Prevent an error from being blocking

当前,出现脚本错误时,WScript会弹出消息框。 这些脚本由其他进程调用,并在服务器上运行,因此没有人可以关闭错误框。

我想要的是将错误消息转储到STDOUT,然后执行以返回调用过程。 弹出作为MSGBox只是挂了整个事情。

有想法吗?


这是应该运行脚本批处理作业的方式:

1
cscript //b scriptname.vbs

不要使用WScript。使用CScript。在Windows命令提示符下,键入以下内容以显示帮助。

1
cscript //?

我建议以下内容:

1
cscript //H:CScript

这将使CScript成为您的默认脚本解释器。 CScript可根据需要将消息打印到控制台(即stdout)。 (它不使用对话框窗口。)
您可能还想尝试// B开关,但是我不能确定是否必须按脚本运行。如果它像// H开关一样是持久的一次性开关,那么这可能对您有用;如果不是,则可能需要修改所有远程程序以包含它。从您提供的信息来看,我认为只需更改默认解释器(// H)即可完成您想要的操作。

您还需要添加某种错误处理,以防止脚本终止于错误。在Visual Basic Sc??ripting Edition中,如果只想忽略错误,最容易做的就是将以下内容添加到脚本顶部。

1
On Error Resume Next

有关更多信息,请参见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){}块。


推荐阅读