调用的批处理文件之间的变量名称

调用的批处理文件之间的变量名称

假设我有两个批处理文件foo.batbar.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>

相关内容