2017-09-30 14 views
1

내 Java 프로그램의 SET 명령 만있는 응용 프로그램 설치 위치에서 .bat 파일을 실행해야합니다..bat 환경 변수를 ProcessBuilder 프로세스로 설정하는 방법

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

아래와 같이

나는 다음 문제는 자바 프로그램이 .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 

vars.bat 내용입니다 실행하려고.

vars.bat 및 test.exe는 모두 응용 프로그램 설치 위치입니다. test.exe를 실행하려면 먼저 vars.bat를 실행해야합니다. exe가 .bat 파일에 설정된 변수를 사용하여 응용 프로그램에 연결하기 때문에

.Bat 파일에 설정된 환경 변수를 ProcessBuilder .

+0

Java 프로그램이 .bat 파일에서 설정 한 envars를 인식하지 못한다는 것을 어떻게 알 수 있습니까? 이'System.out.println (System.getenv ("JAVA_HOME"));을 확인하고 같은 방식으로 .bat에 설정 한 env var를 인쇄 해보십시오. –

+0

인쇄 null 값 – Mohan

+0

@ 모한'C : \ apps \ vars.bat' 파일의 내용을 추가하려면 질문을 편집하십시오. 또한 환경 변수를 읽으려고하는 Java 프로그램의 전체 소스 코드를 추가하십시오. – Progman

답변

1

ProcessBuilder는 시작할 프로세스를 준비하는 데 사용됩니다. ProcessBuild는 실행될 명령 하나만 설정합니다. command()을 사용하면 실행될 명령이 설정/변경되므로 이전 명령은 사라집니다. "vars.bat"명령이나 "test.exe"프로그램은 아직 실행되지 않았습니다. 반환 된 Process 개체로 작업 할 수있는 start() 메서드를 호출 할 때만 실행됩니다.

"test.exe"파일 앞에 "vars.bat"파일을 실행하려면 두 명령을 실행할 다른 "bat"파일을 만들어야합니다. 이렇게하면 동일한 환경/쉘/실행/컨테이너/프로세스에서 실행됩니다. 시작 디렉토리와 설치 디렉토리이 "박쥐"파일

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

실행 또는 이러한 파일에 절대 경로를 사용 : 그래서, 다음과 같은 내용으로 새로운 "박쥐"파일을 만듭니다. 그런 다음 이전에했던 것처럼이 새로운 "박쥐"파일을 ProcessBuilderProcess과 같이 실행할 수 있습니다.