如何继续" setlocal的效果ENABLEDELAYEDEXPANSION"在" endlocal"?之后

时间:2014-03-24 03:40:43

标签: batch-file

这是两个批处理文件:1.bat,setenv.bat
1.bat:
    call setenv.bat
    echo %var%
setenv.bat:
    setlocal ENABLEDELAYEDEXPANSION
    ...
    for ... do (
        if ... (
        set var=!other!
    )
    )
    endlocal
由于某种原因,setenv.bat需要延迟扩展。 setenv.bat用于设置一些环境变量,这些变量在其他文件1.bat中使用。
但即使varsetenv.bat设置正确,1.bat仍然使用var的旧值:在致电var=old之前说setenv.batsetenv.batvar的值更改为new,但1.bat的输出仍为old,我需要new。{{1}}
如果没有本地化修改,可以获得延迟扩展的效果吗?

2 个答案:

答案 0 :(得分:3)

setenv.bat的最后:

...
endlocal&set "var=%var%"&set "var2=%var2%"

答案 1 :(得分:1)

您可以尝试FOR /F保留您的变量:

<强> setenv.bat:

setlocal ENABLEDELAYEDEXPANSION
set other=new
...
for /f "delims=" %%V in (""!other!"") do (
 endlocal
 for ... do (
  if ... (
   set var=%%~V
  )
 )
)