Por que descarregar variáveis ​​em arquivos em lotes do Windows

13

É considerado necessário ou uma boa prática descarregar variáveis ​​usadas nos arquivos em lotes do Windows?
Por exemplo, no código a seguir, é set myFolder=necessário no final?

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

set myFolder=

Eu já vi isso em vários locais online, certamente as variáveis ​​são descarregadas automaticamente quando o arquivo em lotes termina?

ChrisB
fonte

Respostas:

32

SETirá definir uma variável de ambiente global. Ele persistirá após a execução do seu script.

Vamos dar uma olhada em um exemplo.
Primeiro, limpo a variável para garantir que ela não exista.

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

Um teste rápido:

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

Vamos criar esse arquivo em lotes e executá-lo:

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

Vamos ver o valor de TEST após a execução do meu .batarquivo:

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

Portanto, sim, limpar a variável no final do script é uma boa prática.


Melhor ainda seria usar SETLOCALe ENDLOCALevitar todo o problema.

Aqui, criei um novo .batarquivo que usa SETLOCALe ENDLOCAL:

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

Vamos limpar TESTe repetir para garantir que começamos a limpar:

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

Ótimo, agora vamos rodar o novo .bat:

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

Agora TESTainda estará vazio:

C:\Users\Oliver\Desktop>echo %TEST%
%TEST%
Der Hochstapler
fonte
2
+! para esclarecimento
Raystafarian 5/12/12
1
Grande exemplo e explicação - graças
ChrisB