在我的java程序中,我试图通过CMD运行一个不同的程序,其输出出现在前台的命令窗口中,然后分析主java程序中子程序(foo)的退出代码。不幸的是,我似乎能够访问的是CMD窗口的退出代码,它总是为0。
以下是我正在做的事情的片段:
ProcessBuilder pb = new ProcessBuilder();
pb.directory(new File(dir));
pb.command("cmd","/c","start","/wait","foo.exe",arg);
process = pb.start();
exitVal = process.waitFor();
但无论foo如何退出,exitVal始终为0。我怎样才能得到foo的退出代码?
我对java也很陌生,所以如果有更优雅的方式,我可以接受建议。
答案 0 :(得分:0)
我找到了一个解决方案,通过修改我之前尝试过的其中一件事来解释窗口批次是挑剔的。解决方案是向cmd
发送另一个命令,告诉它退出最新的错误代码。之前我曾尝试将& exit %errorlevel%
附加到命令中,但cmd
变量仅在每个命令行的末尾更新,而不是在每个命令的末尾更新。
为了强制更新,我改为使用了%^errorlevel%
。