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.dathasJAVA_HOME=c:\JDK1.6JAVA=c:\JDK1.6\bin\java Running 上面的代码没有设置这些变量,即使我set %%Ido. 这两个 echo 语句没有打印任何内容。我在这里想念什么?为什么从文件中读取的行没有设置到环境中?

4

2 回答 2

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%

账单

于 2013-03-18T16:19:38.060 回答
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
于 2013-03-18T16:12:36.533 回答