为什么要卸载Windows批处理文件中的变量


13

卸载 Windows批处理文件中使用的变量是否被认为是必要的或良好的做法?
例如,在以下代码中,set myFolder=结尾处是否有必要?

@echo off
set myFolder="C:\Temp\Batchfiles"
echo %myFolder%

set myFolder=

我在网上的很多地方都看到过这一点,请问在批处理文件结束时是否会自动卸载变量?

Answers:


33

SET将设置一个全局环境变量。执行脚本后,它将继续存在。

让我们看一个例子。
首先,我清除变量以确保它不存在。

C:\Users\Oliver\Desktop>set TEST=

快速测试:

C:\Users\Oliver\Desktop>echo %TEST%
%TEST%

让我们创建该批处理文件并执行它:

C:\Users\Oliver\Desktop>echo set TEST=something>test.bat
C:\Users\Oliver\Desktop>test.bat
C:\Users\Oliver\Desktop>set TEST=something

让我们看一下执行.bat文件后的TEST值:

C:\Users\Oliver\Desktop>echo %TEST%
something

因此,是的,在脚本末尾清除变量是一个好习惯。


更好的办法是使用SETLOCALENDLOCAL避免整个问题。

在这里,我创建了一个.bat使用SETLOCAL和的新文件ENDLOCAL

C:\Users\Oliver\Desktop>type test.bat
setlocal
set TEST=something
endlocal

让我们清除TEST并回显它,以确保我们开始清理:

C:\Users\Oliver\Desktop>set TEST=
C:\Users\Oliver\Desktop>echo %TEST%
%TEST%

太好了,现在让我们运行新的.bat

C:\Users\Oliver\Desktop>test.bat
C:\Users\Oliver\Desktop>setlocal
C:\Users\Oliver\Desktop>set TEST=something    
C:\Users\Oliver\Desktop>endlocal

现在TEST仍然是空的:

C:\Users\Oliver\Desktop>echo %TEST%
%TEST%

2
+!为澄清
Raystafarian 2012年

1
很好的例子和解释-谢谢
ChrisB 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.