我正在编写一个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.dat
有JAVA_HOME=c:\JDK1.6
和JAVA=c:\JDK1.6\bin\java
运行上面的代码并不是设置这些变量,即使set %%I
中有do
语句。两个echo语句不打印任何内容。我在这里错过了什么?为什么从文件中读取的行没有设置到环境中?
答案 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%
比尔