12

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

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

set myFolder=

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

1 ответ1

30

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%

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .