Domanda

Sto cercando di leggere le variabili da un file batch per un uso successivo nello script batch, che è un launcher Java. Preferirei avere lo stesso formato per il file delle impostazioni su tutte le piattaforme (Unix, Windows) e anche essere un file Proprietà Java valido. Cioè, dovrebbe apparire così:

setting1=Value1
setting2=Value2
...

È possibile leggere valori come faresti in uno script di shell Unix? Potrebbe essere simile a questo:

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

So che questo è probabilmente possibile con SET setting1 = Value1 , ma preferirei avere lo stesso formato di file per le impostazioni su tutte le piattaforme.

Per chiarire: ho bisogno di fare questo nella riga di comando / ambiente batch poiché devo anche impostare parametri che non possono essere modificati all'interno della JVM, come -Xmx o -classpath.

È stato utile?

Soluzione

Puoi farlo in un file batch come segue:

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

Questo legge un file di testo contenente stringhe come " SETTING1 = VALUE1 " e chiama SET per impostarli come variabili di ambiente.

setlocal / endlocal vengono utilizzati per limitare l'ambito delle variabili di ambiente all'esecuzione del file batch.

Il processore di comandi CMD è in realtà abbastanza potente, sebbene con una sintassi piuttosto bizantina.

Altri suggerimenti

È possibile passare il file delle proprietà come parametro a un programma Java (che potrebbe avviare il programma principale in un secondo momento). E quindi beneficiare del paradigma multipiattaforma.

Potrebbe essere saggio importare solo variabili specifiche da un file delle proprietà (quelle che conosci in anticipo), in tal caso ti consiglio una funzione come la seguente:

: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

Quale sarebbe chiamato da call: parsePropertiesFile props.properties setting1 setting2 per impostare le variabili setting1 e setting2

Puoi anche accedere alle variabili di ambiente del sistema operativo da un programma 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));
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top