6

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

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

想法?

4

6 回答 6

4

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

cscript //b scriptname.vbs
于 2008-10-16T08:15:00.010 回答
2

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

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

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

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

于 2008-09-18T03:41:30.643 回答
1

使用WScript.Echo而不是MsgBox. Cscript并且还使用而不是运行脚本Wscript

于 2008-09-18T19:38:33.760 回答
0

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

于 2008-09-18T02:34:43.300 回答
0

不要这样做:

vbscript:在错误恢复下一个

英语:“当你遇到错误时,忽略它并继续前进”。

于 2008-09-18T03:22:49.533 回答
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 并且调用者将收到一个非零错误级别。

于 2011-09-01T07:21:36.123 回答