假设我有两个批处理文件foo.bat
和bar.bat
,它们的位置如下:
root\foo.bat
root\grub\bar.bat
我们还假设两个文件都包含一行设置变量的代码,如下所示:
set PWD=%cd%
现在,如果foo.bat
调用.\grub\bar.bat
,将会bar.bat
覆盖PWD
中设置的变量foo.bat
?
答案1
我做了一个实验。更改 中的环境变量bar.bat
会导致 中的环境变量也发生更改foo.bat
。我认为这是可以预料到的,因为使用set
命令(而非setx
)设置的环境变量的作用域是命令会话。
答案2
范围是全局的/变量是共享的,正如你所说..所以回应你,是的。
此外,如果您使用 setx,它将适用于下一个 cmd 会话和未来的会话,因为它在注册表中。但在讨论范围时,set 和 setx 不应进行比较。环境变量通常是全局的。但您可以在开始时在批处理文件中使用 setlocal,并且在那里设置的变量仍然是本地的
C:\DOCUME~1\bob>type n.bat <ENTER>
setlocal
set a=99
C:\DOCUME~1\bob>echo %a% <ENTER>
%a%
C:\DOCUME~1\bob>n <ENTER>
C:\DOCUME~1\bob>setlocal
C:\DOCUME~1\bob>set a=99
C:\DOCUME~1\bob>echo %a% <ENTER>
%a%
C:\DOCUME~1\bob>