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

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

是否有必要或采取良好做法卸下Windows 批处理文件中使用了哪些变量?
例如,在下面的代码中,set myFolder=末尾的 是必需的吗?

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

set myFolder=

我在网上的很多地方都看到过这种情况,批处理文件结束时变量肯定会自动卸载吗?

答案1

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

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

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%

相关内容