Pregunta

Estoy intentando leer las variables de un archivo por lotes para su uso posterior en el script por lotes, que es un lanzador de Java. Lo ideal sería tener el mismo formato para el archivo de configuración en todas las plataformas (Unix, Windows) y también ser un archivo de propiedades Java válido. Es decir, debería verse así:

setting1=Value1
setting2=Value2
...

¿Es posible leer tales valores como lo haría en un script de shell de Unix? El podría tener un aspecto como este:

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

Sé que esto es probablemente posible con SET setting1 = Value1 , pero realmente prefiero tener el mismo formato de archivo para la configuración en todas las plataformas.

Para aclarar: necesito hacer esto en el entorno de línea de comandos / lote, ya que también debo configurar parámetros que no puedan modificarse desde la JVM, como -Xmx o -classpath.

¿Fue útil?

Solución

Puede hacer esto en un archivo por lotes de la siguiente manera:

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

Esto lee un archivo de texto que contiene cadenas como " SETTING1 = VALUE1 " y llama a SET para establecerlos como variables de entorno.

setlocal / endlocal se utilizan para limitar el alcance de las variables de entorno a la ejecución de su archivo por lotes.

El procesador de comandos de CMD es bastante poderoso, aunque con una sintaxis bizantina.

Otros consejos

Puede pasar el archivo de propiedades como un parámetro a un programa Java (que puede iniciar el programa principal más adelante). Y luego aproveche el paradigma multiplataforma.

Puede ser conveniente importar solo variables específicas de un archivo de propiedades (las que conozca de antemano), en ese caso recomiendo una función como la siguiente:

: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 se llamaría mediante call: parsePropertiesFile props.properties setting1 setting2 para establecer las variables setting1 y setting2

También puede acceder a las variables de entorno del sistema operativo desde un 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top