如何通过VBScript获取可执行Jar文件的命令行返回码?
获取可执行Jar的退出码(VBScript实现)
首先,你当前代码里的核心问题是使用了CMD /K参数——它会让命令提示符在执行完命令后保持打开状态,导致WScript.Shell.Run无法正确返回Jar文件的实际退出码。要解决这个问题,我们需要调整几个关键细节:
- 把
CMD /K替换成CMD /C:这个参数会让CMD执行完命令后立即退出,这样Run方法就能返回Jar执行后的真实退出码。 - 确保
bWaitOnReturn设置为True:脚本会等待Jar完全执行完毕后再继续,保证获取到的退出码是最终结果。 - 移除不必要的
SendKeys操作(如果Jar不需要交互式输入),避免干扰退出码的捕获。
修改后的完整代码
Option Explicit Dim StrCmd, Path, processFile, exitCode Path = "D:\modulefolder" processFile = "java -jar xxx.jar" ' 给路径添加引号,避免路径含空格时命令出错 StrCmd = "CD /D """ & Path & """ & " & processFile ' 隐藏控制台,等待命令执行完成后获取退出码 exitCode = Run(StrCmd, 0, True) ' 根据退出码处理结果 WScript.Echo "Jar执行退出码:" & exitCode Select Case exitCode Case 201 WScript.Echo "执行成功!" Case 400, 405 WScript.Echo "执行失败:错误码" & exitCode Case Else WScript.Echo "未知执行状态:退出码" & exitCode End Select Function Run(StrCmd, Console, bWaitOnReturn) Dim ws, MyCmd, Result Set ws = CreateObject("wscript.Shell") ' 使用CMD /C确保命令执行后立即退出 MyCmd = "CMD /C " & StrCmd ' 执行命令并返回退出码 Result = ws.Run(MyCmd, Console, bWaitOnReturn) Run = Result End Function
关键细节解释
CMD /C的作用:让命令提示符在完成Jar执行后直接终止,此时ws.Run返回的Result就是Jar程序输出的退出码。如果用CMD /K,CMD进程会一直运行,返回的是CMD本身的退出码而非Jar的。- 路径引号:给
Path包裹双引号""" & Path & """,防止路径中包含空格时命令解析失败。 - 交互式输入的特殊情况:如果你的Jar必须通过
SendKeys完成交互式输入,需要将Console参数设为1(显示控制台窗口),并在SendKeys后添加足够的等待时间(比如WScript.Sleep 5000),确保Jar执行完毕后再获取退出码。但这种方式可靠性较低,优先推荐通过命令行参数传递输入,避免使用SendKeys。
内容的提问来源于stack exchange,提问作者Marlabs mysore
相关产品推荐
相关产品推荐

