2008-10-24 14 views
8

Java 실행기 인 배치 스크립트에서 나중에 사용할 수 있도록 배치 파일에서 변수를 읽으려고합니다. 필자는 모든 플랫폼 (Unix, Windows)에서 설정 파일에 대해 동일한 형식을 사용하는 것이 이상적이며 유효한 Java 특성 파일이기도합니다.Windows의 파일에서 환경 변수 읽기 (cmd.exe)

setting1=Value1 
setting2=Value2 
... 

이 유닉스 쉘 스크립트에 같은 값이 같은 것을 읽을 수 있나요 : 즉,는 다음과 같이해야한다?

READ settingsfile.xy 
java -Dsetting1=%setting1% ... 

나는이 SET setting1=Value1와 아마 가능하다는 것을 알고,하지만 난 정말이 아니라 모든 플랫폼의 설정에 대해 동일한 파일 형식이있을 것이다 다음은 다음과 비슷한 모습이 될 것입니다 수 있습니다.

설명 : 명령 행/배치 환경에서이 작업을 수행해야합니다. 이는 -Xmx 또는 -classpath와 같이 JVM 내에서 변경할 수없는 매개 변수를 설정해야하기 때문입니다.

답변

15

당신은 배치 파일에서이 작업을 수행 할 수 있습니다

setlocal 
FOR /F "tokens=*" %%i in ('type Settings.txt') do SET %%i 
java -Dsetting1=%setting1% ... 
endlocal 

이 환경 변수로 설정하는 SET "설정 1 = VALUE1"와 같은 문자열과 통화를 포함하는 텍스트 파일을 읽습니다.

setlocal/endlocal은 환경 변수의 범위를 배치 파일 실행으로 제한하는 데 사용됩니다.

CMD 명령 프로세서는 오히려 비잔틴 구문을 사용하여 실제로 매우 강력합니다.

+0

오랫동안 해결책을 찾은 후에이 솔루션을 발견했습니다. 고맙습니다! – Pereira

2

매개 변수로 특성 파일을 Java 프로그램 (나중에 주 프로그램을 시작할 수 있음)에 전달할 수 있습니다. 그리고 다중 플랫폼 패러다임의 혜택을 누립니다. 다음과 같이

+0

예, 그건 변수 설정 1 및 설정 2를 설정하는 데 g :이 경우 본인은 다음과 같은 기능을하는 것이 좋습니다 사실이지만 JVM이 실행되면 변경 될 수없는 -Xmx와 같은 구성 요소도 필요합니다. –

+0

오, 알겠지만, 솔루션에 비해 과도한 소리가 들리지만 다른 Java에서 Java를 다시 실행할 수 있습니다. 내 잘못 받아들이지 마라. 나는 선택된 솔루션을 선호한다. –

0

또한 Java 프로그램 내에서 OS '환경 변수에 액세스 할 수 있습니다

import java.util.Map; 

public class EnvMap { 
    public static void main (String[] args) { 
     Map<String, String> env = System.getenv(); 
     for (String envName : env.keySet()) { 
      System.out.format("%s=%s%n", envName, env.get(envName)); 
     } 
    } 
} 
1

그것은 (당신에 대해 사전에 알고있는 것들) 특성 파일에서만 수입 특정 변수에 현명 할 수있는 call:parsePropertiesFile props.properties setting1 setting2에 의해 호출 될

:parsePropertiesFile 
    set PROPS_FILE=%1 
    shift 
    :propLoop 
    if "%1"=="" goto:eof 
    FOR /F "tokens=*" %%i in ('type %PROPS_FILE% ^| findStr.exe "%1="') do SET %%i 
    shift 
    GOTO propLoop 
goto:eof