是否有必要或采取良好做法卸下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
所以,是的,在脚本末尾清除变量是一种很好的做法。
更好的方法是使用SETLOCAL
和ENDLOCAL
以避免整个问题。
在这里,我创建了一个.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%