如何将 .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" 文件 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" 文件 ProcessBuilder
和 Process
就像你以前做过的那样。