gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:29:05 24 4
gpt4 key购买 nike

我需要从应用程序安装位置执行 .bat 文件,该文件仅包含来 self 的 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 创建的进程。

最佳答案

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”文件。

关于java - 如何为 ProcessBuilder 进程设置 .bat 环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46498375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com