我有一个批处理文件,通过一系列中间变量计算变量:
@echo off
setlocal
set base=compute directory
set pkg=compute sub-directory
set scripts=%base%\%pkg%\Scripts
endlocal
%scripts%\activate.bat
Run Code Online (Sandbox Code Playgroud)
最后一行的脚本没有被调用,因为它来自endlocal,它破坏了scripts环境变量,但它必须在endlocal之后,因为它的目的是设置一堆其他环境变量供用户使用.
如何调用脚本的目的是设置永久环境变量,但是谁的位置是由临时环境变量决定的?
我知道我可以在endlocal之前创建一个临时的批处理文件,并在endlocal之后调用它,如果没有别的东西可以解决,我会这样做,但我想知道是否有一个不那么令人讨厌的解决方案.
这段代码
@echo off
setlocal EnableDelayedExpansion
set myvar=first
set first=second
echo myvar:!myvar!
set myvar=!myvar!
echo myvar:!myvar!
Run Code Online (Sandbox Code Playgroud)
给
myvar:first
myvar:first
Run Code Online (Sandbox Code Playgroud)
在Windows Vista SP2上.
我预期的输出是
myvar:first
myvar:second
Run Code Online (Sandbox Code Playgroud)
为什么差异以及如何获得理想的效果?