Зачем выгружать переменные в пакетных файлах Windows

13

Считается ли необходимым или хорошей практикой выгружать переменные, используемые в пакетных файлах Windows?
Например, в следующем коде set myFolder=необходим ли конец?

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

set myFolder=

Я видел это в нескольких местах в Интернете, конечно, переменные выгружаются автоматически, когда заканчивается пакетный файл?

ChrisB
источник

Ответы:

33

SETустановит глобальную переменную среды. Он сохранится после выполнения вашего скрипта.

Давайте посмотрим на пример.
Сначала я очищаю переменную, чтобы убедиться, что она не существует.

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

Быстрый тест:

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

Давайте создадим этот пакетный файл и выполним его:

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

Давайте посмотрим значение TEST после выполнения моего .batфайла:

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

Так что да, очистка переменной в конце скрипта - это хорошая практика.


Еще лучше было бы использовать SETLOCALи ENDLOCALизбежать всей проблемы.

Здесь я создал новый .batфайл, который использует SETLOCALи ENDLOCAL:

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

Давайте очистим TESTи повторим это, чтобы убедиться, что мы начнем чистить:

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

Отлично, теперь давайте запустим новое .bat:

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

Теперь TESTвсе равно будет пусто:

C:\Users\Oliver\Desktop>echo %TEST%
%TEST%
Der Hochstapler
источник
2
+! для уточнения
Raystafarian
1
Отличный пример и объяснение - спасибо
ChrisB