Навіщо вивантажувати змінні у пакетних файлах Windows


13

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

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

set myFolder=

Я бачив це в багатьох місцях в Інтернеті, напевно змінні автоматично завантажуються, коли закінчується пакетний файл?

Відповіді:


31

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%

2
+! для уточнення
Raystafarian

1
Чудовий приклад та пояснення - спасибі
ChrisB
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.