代码之家  ›  专栏  ›  技术社区  ›  Mohan

如何设置。ProcessBuilder进程的bat环境变量

  •  1
  • Mohan  · 技术社区  · 8 年前

    我需要执行。应用程序安装位置的bat文件,该文件仅设置了来自java程序的命令。

    我试着按如下所示跑步

    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);
     }
    

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

    任何想法,如何设置环境变量集。使用ProcessBuilder创建要处理的bat文件。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Progman    8 年前

    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 过程 就像你以前做的那样。