我有以下问题。
让我们说有两个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中得到了这个输出:
-- --
似乎两次通话之间的信息丢失了。有人能帮助我吗? 感谢!!!
答案 0 :(得分:0)
环境仅从父进程继承到子进程。因此,当b1.bat结束时,无论b1.bat设置什么都会丢失(因此你的java进程和b2.bat都不会看到由b1.bat设置的环境变量)。当然,对于您的java代码可以启动的任何其他进程,这些都不可见。
如果要为子进程设置环境变量,则应使用ProcessBuilder执行它们(这样可以在启动之前设置特定的环境变量)。
答案 1 :(得分:0)
b0.bat代码:
call b1.bat
call b2.bat
Java的代码:
Runtime.getRuntime().exec("cmd /c call C:\\Users\\Administrator\\Desktop\\b0.bat").waitFor();