Чтение переменных среды из файла в Windows Batch (cmd.exe) - PullRequest
8 голосов
/ 24 октября 2008

Я пытаюсь прочитать переменные из пакетного файла для последующего использования в пакетном скрипте, который является средством запуска Java. В идеале я хотел бы иметь одинаковый формат для файла настроек на всех платформах (Unix, Windows), а также быть действительным файлом свойств Java. То есть это должно выглядеть так:

setting1=Value1
setting2=Value2
...

Можно ли читать такие значения, как вы это делаете в сценарии оболочки Unix? Может выглядеть примерно так:

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

Я знаю, что это возможно с SET setting1=Value1, но я бы предпочел иметь одинаковый формат файла для настроек на всех платформах.

Чтобы уточнить: мне нужно сделать это в командной строке / пакетной среде, поскольку мне также нужно установить параметры, которые нельзя изменить изнутри JVM, например -Xmx или -classpath.

Ответы [ 4 ]

15 голосов
/ 24 октября 2008

Вы можете сделать это в командном файле следующим образом:

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

Это читает текстовый файл, содержащий строки типа «SETTING1 = VALUE1» и вызывает SET, чтобы установить их как переменные среды.

setlocal / endlocal используются для ограничения области действия переменных среды выполнением вашего командного файла.

Командный процессор CMD на самом деле довольно мощный, хотя и с довольно византийским синтаксисом.

2 голосов
/ 24 октября 2008

Вы можете передать файл свойств в качестве параметра программе Java (которая может запустить основную программу позже). А затем воспользуйтесь многоплатформенной парадигмой.

1 голос
/ 01 июня 2011

Может быть целесообразно импортировать только определенные переменные из файла свойств (о которых вы знаете заранее), в этом случае я рекомендую функцию, подобную следующей:

: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

0 голосов
/ 25 октября 2008

Вы также можете получить доступ к переменным окружения ОС из Java-программы:

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