Gründe für das Entladen von Variablen in Windows-Batchdateien


13

Wird das Entladen von Variablen, die in Windows-Batchdateien verwendet werden, als notwendig oder als bewährte Methode angesehen ?
Zum Beispiel im folgenden Code, ist das set myFolder=am Ende notwendig?

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

set myFolder=

Ich habe dies an mehreren Stellen online gesehen. Werden die Variablen doch automatisch entladen, wenn die Batch-Datei endet?

Antworten:


31

SETlegt eine globale Umgebungsvariable fest. Es bleibt auch nach der Ausführung Ihres Skripts bestehen.

Schauen wir uns ein Beispiel an.
Zuerst lösche ich die Variable, um sicherzustellen, dass sie nicht existiert.

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

Ein kurzer Test:

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

Lassen Sie uns diese Batch-Datei erstellen und ausführen:

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

Lassen Sie uns den Wert von TEST nach der Ausführung meiner .batDatei sehen:

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

Also, ja, das Löschen der Variablen am Ende des Skripts ist eine gute Praxis.


Noch besser wäre es, das ganze Problem zu nutzen SETLOCALund ENDLOCALzu vermeiden.

Hier habe ich eine neue .batDatei, die Verwendungen SETLOCALund ENDLOCAL:

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

Machen TESTwir es klar und wiederholen es, um sicherzustellen, dass wir sauber anfangen:

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

Großartig, jetzt lass uns das Neue starten .bat:

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

Jetzt TESTwird noch leer sein:

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

2
+! zur Verdeutlichung
Raystafarian

1
Tolles Beispiel und Erklärung - danke
ChrisB
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.