Perché scaricare le variabili nei file batch di Windows


13

È considerato necessario o buona pratica scaricare le variabili utilizzate nei file batch di Windows?
Ad esempio nel seguente codice, è set myFolder=necessario alla fine?

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

set myFolder=

Ho visto questo in diversi punti online, sicuramente le variabili vengono scaricate automaticamente alla fine del file batch?

Risposte:


32

SETimposterà una variabile d'ambiente globale. Persisterà dopo l'esecuzione del tuo script.

Diamo un'occhiata a un esempio.
Innanzitutto, deseleziono la variabile per assicurarmi che non esista.

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

Un rapido test:

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

Creiamo quel file batch ed eseguirlo:

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

Vediamo il valore di TEST dopo l'esecuzione del mio .batfile:

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

Quindi sì, cancellare la variabile alla fine dello script è una buona pratica.


Ancora meglio sarebbe usare SETLOCALed ENDLOCALevitare l'intero problema.

Qui, ho creato un nuovo .batfile che utilizza SETLOCALe ENDLOCAL:

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

Cancella TESTe riecheggiamo per assicurarci di iniziare in modo pulito:

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

Bene, ora eseguiamo il nuovo .bat:

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

Ora TESTsarà ancora vuoto:

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

2
+! per il chiarimento
Raystafarian

1
Grande esempio e spiegazione - grazie
ChrisB
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.