簡體   English   中英

如何將 .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 都來自應用程序安裝位置。 首先運行 test.exe 我需要運行 vars.bat 因為 exe 使用 .bat 文件中設置的變量來連接到應用程序

任何想法,如何將 .bat 文件中設置的環境變量設置為使用 ProcessBuilder 創建的進程。

ProcessBuilder 用於准備要啟動的進程。 ProcessBuild 將只設置一個要執行的命令。 當您使用command() ,它將設置/更改要執行的命令,因此您之前的命令將消失。 請記住,您的“vars.bat”命令和“test.exe”程序都尚未執行。 它只會在您調用start()方法時執行,您可以在該方法中使用返回的Process對象。

要在“test.exe”文件之前運行“vars.bat”文件,您必須創建另一個將執行這兩個命令的“bat”文件。 這樣它們將在相同的環境/shell/execution/container/process 中運行。 因此,創建一個包含以下內容的新“bat”文件:

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

以安裝目錄作為啟動目錄運行這個“bat”文件,或者使用這些文件的絕對路徑。 然后,您可以像以前一樣使用ProcessBuilderProcess運行這個新的“bat”文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM