Pergunta

Estou tentando ler variáveis ​​de um arquivo em lote para uso posterior no script em lote, que é um iniciador Java.O ideal seria ter o mesmo formato para o arquivo de configurações em todas as plataformas (Unix, Windows) e também ser um arquivo de propriedades Java válido.Ou seja, deve ficar assim:

setting1=Value1
setting2=Value2
...

É possível ler esses valores como faria em um script de shell Unix?O poderia ser algo assim:

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

Eu sei que isso provavelmente é possível com SET setting1=Value1, mas prefiro ter o mesmo formato de arquivo para as configurações em todas as plataformas.

Esclarecer:Preciso fazer isso no ambiente de linha de comando/lote, pois também preciso definir parâmetros que não podem ser alterados na JVM, como -Xmx ou -classpath.

Foi útil?

Solução

Você pode fazer isso em um arquivo em lote da seguinte maneira:

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

Isto lê um arquivo de texto contendo strings como "SETTING1=VALUE1" e chama SET para defini-las como variáveis ​​de ambiente.

setlocal/endlocal são usados ​​para limitar o escopo das variáveis ​​de ambiente para a execução do seu arquivo em lote.

O Processador de Comando CMD é bastante poderoso, embora com uma sintaxe bastante bizantina.

Outras dicas

Você pode passar o arquivo de propriedades como parâmetro para um programa Java (que pode iniciar o programa principal posteriormente).E então aproveite o paradigma multiplataforma.

Pode ser aconselhável importar apenas variáveis ​​específicas de um arquivo de propriedades (aquelas que você conhece antecipadamente); nesse caso, recomendo uma função como a seguinte:

: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

Que seria chamado por call:parsePropertiesFile props.properties setting1 setting2 para definir as variáveis ​​setting1 e setting2

Você também pode acessar as variáveis ​​de ambiente do sistema operacional de dentro de um programa 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));
        }
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top