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

Chr*_*isB 15 windows environment-variables cmd.exe

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

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

set myFolder=
Run Code Online (Sandbox Code Playgroud)

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

Der*_*ler 35

SET将设置一个全局环境变量。它会在您的脚本执行后持续存在。

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

C:\Users\Oliver\Desktop>set TEST=
Run Code Online (Sandbox Code Playgroud)

快速测试:

C:\Users\Oliver\Desktop>echo %TEST%
%TEST%
Run Code Online (Sandbox Code Playgroud)

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

C:\Users\Oliver\Desktop>echo set TEST=something>test.bat
C:\Users\Oliver\Desktop>test.bat
C:\Users\Oliver\Desktop>set TEST=something
Run Code Online (Sandbox Code Playgroud)

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

C:\Users\Oliver\Desktop>echo %TEST%
something
Run Code Online (Sandbox Code Playgroud)

所以,是的,清除脚本末尾的变量是一种很好的做法。


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

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

C:\Users\Oliver\Desktop>type test.bat
setlocal
set TEST=something
endlocal
Run Code Online (Sandbox Code Playgroud)

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

C:\Users\Oliver\Desktop>set TEST=
C:\Users\Oliver\Desktop>echo %TEST%
%TEST%
Run Code Online (Sandbox Code Playgroud)

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

C:\Users\Oliver\Desktop>test.bat
C:\Users\Oliver\Desktop>setlocal
C:\Users\Oliver\Desktop>set TEST=something    
C:\Users\Oliver\Desktop>endlocal
Run Code Online (Sandbox Code Playgroud)

现在TEST仍然是空的:

C:\Users\Oliver\Desktop>echo %TEST%
%TEST%
Run Code Online (Sandbox Code Playgroud)

  • +!为了澄清 (2认同)