CScript / WScript防止错误被阻止

时间:2008-09-18 02:26:08

标签: vbscript automation wsh

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

我想要的是将错误消息转储到STDOUT,并执行以返回调用进程。弹出作为MSGBox只会挂起整个东西。

想法?

6 个答案:

答案 0 :(得分:4)

这是您应该如何运行脚本批处理作业:

cscript //b scriptname.vbs

答案 1 :(得分:2)

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

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

您还需要添加某种错误处理,以防止脚本因错误而终止。在Visual Basic Sc​​ripting Edition中,如果您只想忽略错误,最简单的方法是将以下内容添加到脚本的顶部。

On Error Resume Next
有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/53f3k80h(VS.85).aspx

答案 2 :(得分:1)

使用WScript.Echo而不是MsgBox。并且,使用CSCRIPT而不是WSCRIPT运行脚本。

答案 3 :(得分:0)

您尚未说明您使用的语言。如果您使用的是VBScript,则可以使用On Error...语句编写错误处理程序。如果您使用的是JScript,则可以使用try {} catch (x) {}块。

答案 4 :(得分:0)

不要这样做:

的VBScript: 在错误恢复下

英文: “如果你有错误,请忽略它并继续前进。”

答案 5 :(得分:0)

我建议你把你的脚本代码放在Sub中 - 例如DoWork - 并为您的脚本编写如下代码:

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,并且调用者将收到非零错误级别。