获取从java程序调用的CMD子进程的退出值



在我的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();

但exitVal始终为0,无论foo如何退出。如何只获取foo的退出代码
我对java也很陌生,所以如果有更优雅的方法,我愿意接受建议。

我发现了一个解决方案,通过修改我之前尝试过的一件事来解释windows批处理的挑剔。解决方案是向cmd发送另一个命令,告诉它退出并返回最新的错误代码。早些时候,我曾尝试过将& exit %errorlevel%附加到命令中,但cmd变量只在每个命令行的末尾更新,而不是在每个命令的末尾更新
为了强制更新,我使用了%^errorlevel%