这是两个批处理文件: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
中使用。
但即使var
中setenv.bat
设置正确,1.bat
仍然使用var
的旧值:在致电var=old
之前说setenv.bat
, setenv.bat
将var
的值更改为new
,但1.bat
的输出仍为old
,我需要new
。{{1}}
如果没有本地化修改,可以获得延迟扩展的效果吗?
答案 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
)
)
)