从Windowsbatch file读取环境variables(cmd.exe)

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

setting1=Value1 setting2=Value2 ... 

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

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

我知道这可能是SET setting1=Value1 ,但我真的宁愿所有平台上的设置相同的文件格式。

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

你可以在批处理文件中做到这一点,如下所示:

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

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

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

CMD命令处理器实际上是相当强大的,虽然有一个相当的拜占庭语法。

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

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

 :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

您也可以从Java程序中访问OS的环境变量:

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