Вопрос

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

setting1=Value1
setting2=Value2
...

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Который будет вызываться вызовом : parsePropertiesFile props.properties setting1 setting2 для установки переменных setting1 и setting2

Вы также можете получить доступ к переменным окружения ОС из 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));
        }
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top