【发布时间】:2013-01-10 15:10:02
【问题描述】:
可能重复:
Make an environment variable survive ENDLOCAL
How to keep the value of a variable outside a Windows batch script which uses “delayed expansion local” mode?
我有一个类似这样的批处理文件:
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 障碍的容器,但欢迎使用更优雅的解决方案。
【问题讨论】:
标签: windows batch-file environment-variables