Windows Batch (cmd.exe)의 파일에서 환경 변수 읽기
-
04-07-2019 - |
문제
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));
}
}
}