使用Java调用BAT并保存环境(由BAT更改)以将环境传递到下一个BAT

时间:2016-06-01 10:47:20

标签: java batch-file cmd

我有以下问题。

让我们说有两个BAT文件叫做b1和b2:

b1正在设置一个ENV:set hello=hello

b2回应/打印此ENV:echo -- %hello% -- >> C:\Users\Administrator\Desktop\hello.txt

现在,我想调用b1和b2抛出JAVA并让b2根据%hello%的值回显你好。

如果我这样做:

Runtime.getRuntime().exec("cmd /c call C:\\Users\\Administrator\\Desktop\\b1.bat").waitFor();
Runtime.getRuntime().exec("cmd /c call C:\\Users\\Administrator\\Desktop\\b2.bat").waitFor();

我在hello.txt中得到了这个输出:

-- --

似乎两次通话之间的信息丢失了。有人能帮助我吗? 感谢!!!

2 个答案:

答案 0 :(得分:0)

环境仅从父进程继承到子进程。因此,当b1.bat结束时,无论b1.bat设置什么都会丢失(因此你的java进程和b2.bat都不会看到由b1.bat设置的环境变量)。当然,对于您的java代码可以启动的任何其他进程,这些都不可见。

如果要为子进程设置环境变量,则应使用ProcessBuilder执行它们(这样可以在启动之前设置特定的环境变量)。

答案 1 :(得分:0)

是的,我找到了解决方案。 我生成了一个新的bat文件(b0)并调用其他文件。 所以这段代码可以帮助我。

b0.bat代码:

call b1.bat
call b2.bat

Java的代码:

 Runtime.getRuntime().exec("cmd /c call C:\\Users\\Administrator\\Desktop\\b0.bat").waitFor();