从Windows Batch(cmd.exe)中的文件中读取环境变量

时间:2008-10-24 07:29:47

标签: java windows command-line cmd environment-variables

我正在尝试从批处理文件中读取变量,以便以后在批处理脚本中使用,这是一个Java启动程序。理想情况下,我希望在所有平台(Unix,Windows)上使用相同的设置文件格式,并且也是有效的Java Properties文件。也就是说,它应该是这样的:

setting1=Value1
setting2=Value2
...

是否可以像在Unix shell脚本中那样读取这些值?可能看起来像这样:

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

我知道这可能与SET setting1=Value1有关,但我真的宁愿在所有平台上使用相同的文件格式。

澄清一下:我需要在命令行/批处理环境中执行此操作,因为我还需要设置无法在JVM中更改的参数,如-Xmx或-classpath。

4 个答案:

答案 0 :(得分:15)

您可以在批处理文件中执行此操作,如下所示:

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

这将读取包含“SETTING1 = VALUE1”等字符串的文本文件,并调用SET将其设置为环境变量。

setlocal / endlocal用于将环境变量的范围限制为批处理文件的执行。

CMD命令处理器实际上非常强大,但具有相当的拜占庭语法。

答案 1 :(得分:2)

您可以将属性文件作为参数传递给Java程序(稍后可能会启动主程序)。然后从多平台范例中受益。

答案 2 :(得分:1)

仅从属性文件中导入特定变量(您提前知道的变量)可能是明智的,在这种情况下,我建议使用如下函数:

: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

call:parsePropertiesFile props.properties setting1 setting2调用以设置变量setting1和setting2

答案 3 :(得分:0)

您还可以从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));
        }
    }
}