可能重复:
使环境变量存活 ENDLOCAL
如何将变量的值保留在使用“延迟扩展本地”模式的 Windows 批处理脚本之外?
我有一个批处理文件,它是这样的:
REM I need to use SETLOCAL so as not to pollute the environment
REM with any variables used to implement the logic in this script
SETLOCAL
SET I_DONT_WANT_THIS_VARIABLE_TO_LEAK_OUTSIDE=c:\
REM BUT, there is this one change to the environment I want to make sticky:
PATH %PATH%;%I_DONT_WANT_THIS_VARIABLE_TO_LEAK_OUTSIDE%
该脚本用于SETLOCAL
将环境与批处理文件想要做的任何事情隔离开来,但这会导致一个问题:最后我确实想以某种非常具体的方式修改调用者的环境,但SETLOCAL
会阻止这种情况(更改会立即撤消批处理文件退出)。我也不能ENDLOCAL
在设置路径之前调用,因为这会将环境恢复到其原始状态,清除变量的值,因此我不能将其值附加到路径中。
有没有办法在忽略SETLOCAL
有效的情况下设置路径?或者,是否有任何技巧可以在调用时显式保护变量的值不被清除ENDLOCAL
?
我知道可以使用临时文件作为可以绕过ENDLOCAL
障碍的容器,但欢迎使用更优雅的解决方案。