Por que descarregar variáveis em arquivos em lote do Windows

12

Considera-se necessário ou recomendável praticar descarregar variáveis usadas em arquivos em lotes do Windows?
Por exemplo, no código a seguir, o set myFolder= no final é necessário?

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

set myFolder=

Eu já vi isso em vários lugares on-line, certamente as variáveis são descarregadas automaticamente quando o arquivo em lote termina?

    
por ChrisB 05.03.2012 / 13:03

1 resposta

29

SET 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, eu limpo a variável para ter certeza de que ela não existe.

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

Um teste rápido:

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

Vamos criar esse arquivo em lote 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 arquivo .bat :

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

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

Melhor ainda seria usar SETLOCAL e ENDLOCAL para evitar o problema problema.

Aqui, criei um novo arquivo .bat que usa SETLOCAL e ENDLOCAL :

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

Vamos limpar TEST e fazer eco para garantir que começaremos limpo:

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

Ótimo, agora vamos executar 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 TEST ainda estará vazio:

C:\Users\Oliver\Desktop>echo %TEST%
%TEST%
    
por 05.03.2012 / 13:25