批处理脚本读取文件并设置为环境变量

时间:2013-03-18 15:50:13

标签: windows batch-file command

我正在编写一个shell脚本来读取包含key = value对的文件,并将这些变量设置为环境变量。我尝试使用以下代码,

if EXIST "test.dat" (
    for /F "tokens=*" %%I in (test.dat) do @set %%I
    echo setting JAVA_HOME to :: %JAVA_HOME%
    echo setting JAVA to %JAVA%
)

假设test.datJAVA_HOME=c:\JDK1.6JAVA=c:\JDK1.6\bin\java 运行上面的代码并不是设置这些变量,即使set %%I中有do语句。两个echo语句不打印任何内容。我在这里错过了什么?为什么从文件中读取的行没有设置到环境中?

2 个答案:

答案 0 :(得分:0)

这在这里有效:

if exist test.dat for /f "delims=" %%i in (test.dat) do set %%i
set java

输出:

JAVA=c:\JDK1.6\bin\java
JAVA_HOME=c:\JDK1.6

答案 1 :(得分:0)

%字符中包含的环境变量在代码行解析时评估,而不是在执行时评估。如果您希望cmd在执行代码行时评估环境变量,则需要启用“延迟变量扩展”并将环境变量名称括在而不是中。例如:

...
setlocal enableextensions enabledelayedexpansion
...
if EXIST "test.txt" (
  for /F "tokens=*" %%I in (%SEURAT_SERVER_DIR%\server-variables.dat) do @set %%I
  echo setting JAVA_HOME to :: !JAVA_HOME!
  echo setting JAVA to !JAVA!
)
echo JAVA_HOME=%JAVA_HOME%
echo JAVA=%JAVA%

比尔