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

How to set .bat environment variables to ProcessBuilder process

我需要从应用程序安装位置执行 .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 均来自应用程序安装位置。对于 运行ning test.exe 首先我需要 运行 vars.bat 因为 exe 使用 .bat 文件中设置的变量连接到应用程序

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

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

要在 "test.exe" 文件之前 运行 "vars.bat" 文件,您必须创建另一个 "bat" 文件来执行这两个命令。这样他们就会 运行 在同一个 environment/shell/execution/container/process 中。因此,创建一个包含以下内容的新 "bat" 文件:

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

运行这个"bat"文件以安装目录为起始目录或者使用这些文件的绝对路径。然后你可以 运行 这个新的 "bat" 文件 ProcessBuilderProcess 就像你以前做过的那样。