【问题标题】:Batch script read file and set to environment variable批处理脚本读取文件并设置为环境变量
【发布时间】:2013-03-18 15:50:13
【问题描述】:

我正在编写一个 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 运行上面的代码并没有设置这些变量,即使我在do 中有set %%I 语句。这两个 echo 语句没有打印任何内容。我在这里想念什么?为什么从文件中读取的行没有设置到环境中?

【问题讨论】:

标签: windows batch-file command


【解决方案1】:

这在这里确实有效:

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

【讨论】:

    【解决方案2】:

    包含在 % 字符中的环境变量在代码行解析时进行评估,而不是在执行时评估。如果您希望 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%
    

    比尔

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 1970-01-01
      • 2018-08-08
      • 1970-01-01
      • 2022-09-30
      • 2014-03-03
      • 1970-01-01
      • 2011-10-02
      • 2012-08-22
      相关资源
      最近更新 更多