批处理脚本使其他批处理文件访问setlocal变量

Lol*_*lly 9 windows command batch-file

我正在编写一个批处理文件来从文件中读取路径并将其设置为环境变量.许多其他批处理文件将使用(调用)此批处理文件来获取变量.在编写批处理文件时,我面临一个问题,即变量扩展,所以我曾经SETLOCAL ENABLEDELAYEDEXPANSION克服过这个问题.但是这样做,正在使用它的其他批处理文件无法获取变量集.

以下是批处理脚本,

getVariables.bat

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
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!
)
Run Code Online (Sandbox Code Playgroud)

在我的另一个批处理文件中,我使用上面的batach文件来设置变量

   another.bat

   call getVariables.dat
   echo "%JAVA%"
Run Code Online (Sandbox Code Playgroud)

但回声是打印"",它没有设置.如果这是因为setlocal,我怎么能克服这个?我还需要setlocal延迟扩展并在执行时发生.解决这个问题的任何方法?请帮帮我.

Sve*_*ven 18

要将多个全局变量设置为局部变量的值,请使用以下技巧:

endlocal & (
  set "globalvar1=%localvar1%"
  set "globalvar2=%localvar2%"
  set "globalvar3=%localvar3%"
)
Run Code Online (Sandbox Code Playgroud)

在执行endlocal之前,扩展()块中的变量.

  • 您实际上可以将变量设置为其自己的名称,例如“endlocal & set var=%var%”。`endlocal` 破坏了变量,但它的值已经被替换,因此 `set` 命令立即重新创建它。 (2认同)

BDM*_*BDM 5

endlocal & set str=value将创造奇迹.