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 参数在批处理错误级别中不可用的主要内容,如果未能解决你的问题,请参考以下文章