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)
所以,是的,清除脚本末尾的变量是一种很好的做法。
更好的是使用SETLOCAL并ENDLOCAL避免整个问题。
在这里,我创建了一个.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)