Pourquoi décharger des variables dans des fichiers batch Windows


13

Est-il considéré comme nécessaire ou de bonne pratique de décharger les variables utilisées dans les fichiers batch de Windows?
Par exemple, dans le code suivant, set myFolder=la fin est-elle nécessaire?

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

set myFolder=

J'ai vu cela à plusieurs endroits en ligne, les variables sont sûrement déchargées automatiquement à la fin du fichier batch?

Réponses:


33

SETdéfinira une variable d'environnement globale. Il persistera après l'exécution de votre script.

Voyons un exemple.
Tout d'abord, j'efface la variable pour m'assurer qu'elle n'existe pas.

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

Un test rapide:

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

Créons ce fichier batch et exécutons-le:

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

Voyons la valeur de TEST après l'exécution de mon .batfichier:

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

Donc, oui, effacer la variable à la fin du script est une bonne pratique.


Encore mieux serait d'utiliser SETLOCALet ENDLOCALd'éviter tout le problème.

Ici, j'ai créé un nouveau .batfichier qui utilise SETLOCALet ENDLOCAL:

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

Disons clair TESTet l'écho pour nous assurer que nous commençons propre:

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

Génial, exécutons maintenant le nouveau .bat:

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

Maintenant TESTsera toujours vide:

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

2
+! pour la clarification
Raystafarian

1
Excellent exemple et explication - merci
ChrisB
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.