2008-10-24 9 views
8

J'essaie de lire les variables d'un fichier batch pour les utiliser ultérieurement dans le script batch, qui est un lanceur Java. J'aimerais idéalement avoir le même format pour le fichier de paramètres sur toutes les plateformes (Unix, Windows), et aussi être un fichier Java Properties valide. Autrement dit, il devrait ressembler à ceci:Lire les variables d'environnement à partir du fichier dans Windows Batch (cmd.exe)

setting1=Value1 
setting2=Value2 
... 

Est-il possible de lire ces valeurs comme vous le feriez dans un script shell Unix? Le pourrait devrait ressembler à ceci:

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

Je sais que cela est probablement possible avec SET setting1=Value1, mais je préfèrerais n'avoir le même format de fichier pour les paramètres sur toutes les plateformes.

Pour clarifier: Je dois le faire dans l'environnement de ligne de commande/traitement par lots car j'ai également besoin de définir des paramètres qui ne peuvent pas être modifiés depuis la JVM, comme -Xmx ou -classpath.

Répondre

15

Vous pouvez le faire dans un fichier batch comme suit:

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

Ce lit un fichier texte contenant des chaînes comme « SETTING1 = VALUE1 » et les appels SET pour les définir comme des variables d'environnement. Setlocal/endlocal sont utilisés pour limiter la portée des variables d'environnement à l'exécution de votre fichier séquentiel.

Le processeur de commande CMD est en réalité assez puissant, bien qu'avec une syntaxe plutôt byzantine.

+0

Après une longue période à la recherche d'une solution, j'ai trouvé cette solution. Je vous remercie! – Pereira

2

Vous pouvez transmettre le fichier de propriétés en tant que paramètre à un programme Java (qui peut lancer le programme principal ultérieurement). Et ensuite bénéficier du paradigme multi-plateforme.

+0

Oui, c'est g énéralement vrai, mais j'ai besoin de configurer des trucs comme -Xmx, qui bien sûr ne peuvent pas être changés une fois que la JVM est en cours d'exécution. –

+0

Oh, je vois, ça sonne un peu trop comparé aux solutions mais vous pouvez relancer le Java à partir d'un autre Java. Ne vous méprenez pas, je préfère la solution choisie. –

0

Vous pouvez également accéder aux variables d'environnement « OS à partir d'un programme 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)); 
     } 
    } 
} 
1

Il peut être judicieux de ne variables spécifiques à l'importation à partir d'un fichier de propriétés (ceux que vous connaissez à l'avance), en ce cas, je recommande une fonction comme ce qui suit:

: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 

ce qui serait appelé par call:parsePropertiesFile props.properties setting1 setting2 pour définir les variables SETTING1 et Setting2

Questions connexes