문제

Java 런처 인 배치 스크립트에서 나중에 사용하기 위해 배치 파일의 변수를 읽으려고합니다. 이상적으로는 모든 플랫폼 (UNIX, Windows)의 설정 파일에 대해 동일한 형식을 갖고 유효한 Java 속성 파일이기도합니다. 즉, 다음과 같이 보일 것입니다.

setting1=Value1
setting2=Value2
...

UNIX 쉘 스크립트에서 같은 값을 읽을 수 있습니까? 할 수있는 것은 다음과 같이 보일 것입니다.

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

나는 이것이 아마도 가능하다는 것을 알고있다 SET setting1=Value1, 그러나 나는 모든 플랫폼의 설정에 대해 동일한 파일 형식을 가지고 있습니다.

명확히하기 위해 : 명령 줄/배치 환경에서이를 수행해야하므로 -xmx 또는 -classpath와 같이 JVM 내에서 변경할 수없는 매개 변수를 설정해야하므로이를 수행해야합니다.

도움이 되었습니까?

해결책

다음과 같이 배치 파일 로이 작업을 수행 할 수 있습니다.

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

"setting1 = value1"과 같은 문자열이 포함 된 텍스트 파일을 읽고 환경 변수로 설정하도록 설정합니다.

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

CMD 명령 프로세서는 실제로 비잔틴 구문이 있지만 실제로는 매우 강력합니다.

다른 팁

속성 파일을 Java 프로그램에 매개 변수로 전달할 수 있습니다 (나중에 기본 프로그램을 시작할 수 있음). 그런 다음 멀티 플랫폼 패러다임의 혜택을받습니다.

속성 파일 (미리 알고있는 파일)에서 특정 변수 만 가져 오는 것이 현명 할 수 있습니다.이 경우 다음과 같은 기능을 권장합니다.

: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

이에 의해 호출 될 것입니다 call:parsePropertiesFile props.properties setting1 setting2 변수 setting1 및 setting2를 설정합니다

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));
        }
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top