2013-03-18 121 views
0

我正在编写一个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 运行上面的代码不设置这些变量,即使我有doset %%I声明。两个回声语句不打印任何东西。我在这里错过了什么?为什么从文件中读取的行没有设置到环境中?

+0

相同延迟扩展,当您试图http://stackoverflow.com/questions/15479542/batch-script-set-command-not-working-properly – 2013-03-18 16:22:33

回答

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 
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% 

比尔

变量问题
相关问题