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%