2008-10-24 16 views
8

Ich versuche, Variablen aus einer Batch-Datei für die spätere Verwendung im Batch-Skript, das ein Java-Launcher ist, zu lesen. Ich hätte am liebsten das gleiche Format für die Einstellungsdatei auf allen Plattformen (Unix, Windows) und wäre auch eine gültige Java-Eigenschaftendatei. Das heißt, es sollte wie folgt aussehen:Lesen von Umgebungsvariablen aus der Datei in Windows Batch (cmd.exe)

setting1=Value1 
setting2=Value2 
... 

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

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

Ich weiß, dass dies mit SET setting1=Value1 wohl möglich ist, aber ich würde wirklich lieber das gleiche Dateiformat für die Einstellungen auf allen Plattformen.

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

Antwort

15

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

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

Dieser liest eine Textdatei sie als Umgebungsvariablen setzen SET Zeichenketten wie „SETTING1 = VALUE1“ und Anrufe enthalten.

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

Der CMD-Befehlsprozessor ist tatsächlich ziemlich mächtig, obwohl mit einer ziemlich byzantinischen Syntax.

+0

Nachdem ich lange nach einer Lösung gesucht habe, fand ich diese Lösung. Vielen Dank! – Pereira

2

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

+0

Ja nennen würde, das ist g Alles in allem stimmt, aber ich muss Sachen wie -Xmx auch konfigurieren, was natürlich nicht geändert werden kann, sobald die JVM läuft. –

+0

Oh ich sehe, es klingt Overkill im Vergleich zu den Lösungen, aber Sie können das Java von einem anderen Java neu starten. Versteh mich nicht falsch, ich bevorzuge die gewählte Lösung. –

0

Sie können auch die Umwelt ‚OS zugreifen Variablen aus einem Java-Programm:

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

Es kann nur Datei von einer spezifischen Eigenschaft Variablen Import klug sein (die Sie über im Voraus wissen), in dass Fall empfehle ich eine Funktion wie folgt aus:

: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 

, die von call:parsePropertiesFile props.properties setting1 setting2, um die Variablen setting1 und Einst.2