如何将.bat环境变量设置为ProcessBuilder进程

时间:2017-09-30 00:23:23

标签: java processbuilder

我需要从应用程序安装位置执行.bat文件,该位置只有我的java程序中的SET命令。

我试图按如下所示运行

ProcessBuilder pb = new ProcessBuilder("cmd", "/c","C:\\apps\\vars.bat");
pb.command("C:\\apps\\test.exe","-u=user1", "-p=pwd1");
pb.redirectErrorStream(true);
pb.redirectOutput(outputFile);
Process process = pb.start();
try {
   process.waitFor();
} catch (InterruptedException e) {
  // TODO Auto-generated catch block
   e.printStackTrace();
 }
 process.getOutputStream().close();
 InputStream is = process.getInputStream();
 BufferedReader in = new BufferedReader(new InputStreamReader(is));
 String inputLine;
 while ((inputLine = in.readLine()) != null) {
   System.out.println(inputLine);
 }

以下是vars.bat内容

@rem Defined by Install. Please Do NOT Remove The Following Lines.
set VAR1=110002020150715
set DB_CONNECT=test
set DB_SERVER=localhost
set ORACLE_SID=test
set XML_ENCODING=ISO-8859-1

问题是java程序无法识别.bat文件中设置的任何环境变量。

vars.bat和test.exe都来自应用程序安装位置。首先运行test.exe我需要运行vars.bat,因为exe使用.bat文件中设置的变量连接到应用程序

任何想法,如何将.bat文件中设置的环境变量设置为使用ProcessBuilder创建的进程。

1 个答案:

答案 0 :(得分:1)

ProcessBuilder用于准备要启动的进程。 ProcessBuild将只设置一个要执行的命令。当您使用command()时,它将设置/更改要执行的命令,因此您之前的命令将消失。请记住,您的“vars.bat”命令和“test.exe”程序都尚未执行。它只会在您调用start()方法时执行,您可以在该方法中使用返回的Process对象。

要在“test.exe”文件之前运行“vars.bat”文件,您必须创建另一个“bat”文件,该文件将执行这两个命令。这样它们将在相同的环境/ shell /执行/容器/进程中运行。因此,创建一个包含以下内容的新“bat”文件:

vars.bat
test.exe -u=user1 -p=pwd1

以安装目录作为起始目录运行此“bat”文件,或使用这些文件的绝对路径。然后,您可以像之前一样使用ProcessBuilderProcess运行这个新的“bat”文件。