我需要从应用程序安装位置执行.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创建的进程。
答案 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”文件,或使用这些文件的绝对路径。然后,您可以像之前一样使用ProcessBuilder
和Process
运行这个新的“bat”文件。