Po co usuwać zmienne w plikach wsadowych systemu Windows

12

Czy uważa się to za konieczne lub dobrą praktykę rozładować zmienne używane w plikach wsadowych systemu Windows?
Na przykład w poniższym kodzie jest set myFolder= w końcu konieczne?

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

set myFolder=

Widziałem to w wielu miejscach online, z pewnością zmienne są rozładowywane automatycznie po zakończeniu pliku wsadowego?

ChrisB
źródło

Odpowiedzi:

30

SET ustawi globalną zmienną środowiskową. Będzie się utrzymywać po wykonaniu skryptu.

Spójrzmy na przykład.
Najpierw usuwam zmienną, aby upewnić się, że nie istnieje.

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

Szybki test:

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

Stwórzmy ten plik wsadowy i uruchommy go:

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

Zobaczmy wartość TESTU po wykonaniu mojego .bat plik:

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

Tak więc, wyczyszczenie zmiennej na końcu skryptu jest dobrą praktyką.


Jeszcze lepiej byłoby użyć SETLOCAL i ENDLOCAL aby uniknąć całego problemu.

Tutaj stworzyłem nowy .bat plik, który używa SETLOCAL i ENDLOCAL:

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

Jasne TEST i powtórz to, aby upewnić się, że zaczniemy czyścić:

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

Świetnie, teraz uruchommy nowy .bat:

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

Teraz TEST nadal będzie pusty:

C:\Users\Oliver\Desktop>echo %TEST%
%TEST%
Der Hochstapler
źródło
2
+! dla wyjaśnienia
Raystafarian
1
Świetny przykład i wyjaśnienie - dzięki
ChrisB