wscript.quit 参数在批处理错误级别中不可用

Posted

技术标签:

【中文标题】wscript.quit 参数在批处理错误级别中不可用【英文标题】:wscript.quit parameter not available in batch error level 【发布时间】:2011-10-18 15:14:33 【问题描述】:

从批处理脚本调用的包含单行 wscript.quit(2) 的简单 VBScript 不会将退出参数值传递给批处理错误级别变量,因为它应该 - 批处理文件只回显默认错误级别 (0)。

我最近卸载了 VB6(干净安装 VB.net 所必需的),我认为这至少可能是问题的一部分。在构建将 VBScripting 消息框的结果传递给调用批处理文件的解决方法时,我发现脚本文件系统对象 (scrrun.dll) 已被卸载取消注册,因此有必要将其重新注册到实例化对象。我想知道 wscript.exe 是否需要其他一些依赖项才能让 quit 函数访问批处理错误级别变量。

我在 Dependency Walker 下为上述一行 VBScript 运行 wscript.exe,我在执行过程中收到的唯一错误消息如下:

GetProcAddress(0x755C0000 [MSCTFIME.IME], "ImeGetImeMenuItems") 从地址 0x76397354 的“IMM32.DLL”调用并返回 NULL。错误:找不到指定的过程 (127)。

脚本以正确的 quit 代码 (2) 终止。

提到的 dll 存在于带有 WScript 的 System32 文件夹中,并且无法注册。

我正在运行带有所有最新更新的 WinXP。

任何想法都将不胜感激。

【问题讨论】:

旁注,VB6 和 VB.NET 可以很好地共存。它们是完全不相关的开发环境。 我尝试复制您所描述的内容,它对我有用。你能告诉我们你的批处理文件代码吗? 我也是。也许您正在通过辅助 CMD 调用 wscript? 为什么在值周围有愚蠢的无关括号? tcarvin:在我们的商店里,每个安装了 vb.net 的人都把他们的 vb6 安装搞砸了。我们发现卸载它会更好。 【参考方案1】:

Windows GUI 程序不适合控制台使用;所以他们最常向操作系统返回 False == 0。 Wscript.exe就是这样一个程序。如果您想使用 .bat/.cmd/.exe 控制台程序中的 .vbs,请通过 Cscript.exe 调用它。

鲍勃的证据:

type el.vbs
WScript.Quit 2 ' no () when calling a Sub

echo %ERRORLEVEL%
0

cscript el.vbs

echo %ERRORLEVEL%
2  <======= cscript.exe sets ERRORLEVEL

type el.vbs
WScript.Quit 2 ' no () when calling a Sub

echo %ERRORLEVEL%
0  <======= ERRORLEVEL is (re)set to 0

wscript el.vbs

echo %ERRORLEVEL%
0  <======= wscript.exe does not set ERRORLEVEL

用于 VBScript 5.7.16599 * cscript 5.7 的 QED

更新:感谢 Bob 的评论,我找到了

this correct explanation and remedy

证据:

echo %ERRORLEVEL%
0

start /wait wscript el.vbs

echo %ERRORLEVEL%
2

因此,即使是 Windows GUI 程序也可以/将通过从 _tWinMain 返回一个适当的值来报告状态 - 你只需要 /wait(分别是 .Run( sCmd, nShow, True ) 来选择起来吧。

【讨论】:

Ekkehard Horner:我寄予厚望,希望你能做一些事情,但使用带有等待参数的 START 对我不起作用。就像我说的,这是一个配置问题。我见过其他正确返回错误级别的示例,无论脚本是由 wscript 还是 cscript 调用。

以上是关于wscript.quit 参数在批处理错误级别中不可用的主要内容,如果未能解决你的问题,请参考以下文章

反应本机推送通知在 Android 8.1(API 级别 27)中不起作用

使用 if 语句后跟调用似乎在批处理文件中不起作用

自定义错误处理

php的异常处理

Spring MVC 中不存在必需的字符串参数错误

为啥在 DOM 级别 3 中不推荐使用 DOMSubtreeModified 事件?