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

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

有想法吗?

有帮助吗?

解决方案

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

cscript //b scriptname.vbs

其他提示

不要使用 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 了解更多信息。

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

您还没有说明您使用的是什么语言。如果您使用 VBScript,则可以使用以下命令编写错误处理程序 出错时... 陈述。如果您使用 JScript,则可以使用 尝试 {} catch (x) {} 堵塞。

不要这样做:

VB脚本:出错时继续下一步

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

我建议您将脚本代码放在 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,并且调用者将收到非零错误级别。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top