Frage

Ich versuche, Variablen aus einer Batch-Datei zur späteren Verwendung im Batch-Skript zu lesen, bei dem es sich um einen Java-Launcher handelt.Ich möchte idealerweise auf allen Plattformen (Unix, Windows) das gleiche Format für die Einstellungsdatei haben und außerdem eine gültige Java-Eigenschaftendatei sein.Das heißt, es sollte so aussehen:

setting1=Value1
setting2=Value2
...

Ist es möglich, solche Werte wie in einem Unix-Shell-Skript zu lesen?Das könnte etwa so aussehen:

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

Ich weiß, dass dies wahrscheinlich mit möglich ist SET setting1=Value1, aber ich hätte lieber das gleiche Dateiformat für die Einstellungen auf allen Plattformen.

Um klarzustellen:Ich muss dies in der Befehlszeilen-/Batch-Umgebung tun, da ich auch Parameter festlegen muss, die nicht innerhalb der JVM geändert werden können, wie z. B. -Xmx oder -classpath.

War es hilfreich?

Lösung

Sie können dies in einer Batch-Datei wie folgt tun:

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

Dies liest eine Textdatei mit Zeichenfolgen wie „SETTING1=VALUE1“ und ruft SET auf, um sie als Umgebungsvariablen festzulegen.

setlocal/endlocal werden verwendet, um den Umfang der Umgebungsvariablen auf die Ausführung Ihrer Batchdatei zu beschränken.

Der CMD-Befehlsprozessor ist tatsächlich ziemlich leistungsfähig, allerdings mit einer eher byzantinischen Syntax.

Andere Tipps

Sie können die Eigenschaftendatei als Parameter an ein Java-Programm übergeben (das später möglicherweise das Hauptprogramm startet).Und dann vom Multi-Plattform-Paradigma profitieren.

Es kann sinnvoll sein, nur bestimmte Variablen aus einer Eigenschaftendatei zu importieren (solche, die Sie im Voraus kennen). In diesem Fall empfehle ich eine Funktion wie die folgende:

: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

Welches würde aufgerufen werden von call:parsePropertiesFile props.properties setting1 setting2 um die Variablen Setting1 und Setting2 zu setzen

Sie können auch aus einem Java-Programm heraus auf die Umgebungsvariablen des Betriebssystems zugreifen:

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));
        }
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top