setlocal
Komenda setlocal
służy do rozpoczynania lokalnego kontekstu zmiennych środowiskowych w skryptach wsadowych. Pozwala tworzyć zmienne, które działają tylko w określonym zakresie (blok skryptu), a po jego zakończeniu wszystkie zmiany są automatycznie cofane. Jest przydatna w skryptach, gdzie potrzebne są tymczasowe wartości zmiennych.
Dostępna jest we wszystkich wersjach Windows (XP, Vista, 7, 8, 10, 11 oraz Windows Server).
Składnia
Dział zatytułowany „Składnia”setlocal [ENABLEEXTENSIONS] [DISABLEEXTENSIONS] [ENABLEDELAYEDEXPANSION] [DISABLEDELAYEDEXPANSION]
ENABLEEXTENSIONS
– włącza rozszerzenia poleceń CMD w bieżącym zakresie.DISABLEEXTENSIONS
– wyłącza rozszerzenia poleceń.ENABLEDELAYEDEXPANSION
– włącza opóźnioną ekspansję zmiennych (!VAR!
).DISABLEDELAYEDEXPANSION
– wyłącza opóźnioną ekspansję zmiennych.
Parametry
Dział zatytułowany „Parametry”Parametr | Opis |
---|---|
ENABLEEXTENSIONS | Włącza dodatkowe funkcje CMD (np. rozszerzone zmienne i polecenia). |
DISABLEEXTENSIONS | Wyłącza rozszerzenia CMD w bieżącym zakresie. |
ENABLEDELAYEDEXPANSION | Pozwala na dynamiczne rozwijanie zmiennych za pomocą !zmienna! w pętli. |
DISABLEDELAYEDEXPANSION | Wyłącza opóźnioną ekspansję zmiennych. |
Przykłady użycia
Dział zatytułowany „Przykłady użycia”@echo offset VAR=Global
echo Przed setlocal: %VAR%
setlocal ENABLEDELAYEDEXPANSIONset VAR=Lokalna
echo Wewnątrz setlocal: %VAR%endlocal
echo Po endlocal: %VAR%
# Użycie opóźnionej ekspansji w pętlisetlocal ENABLEDELAYEDEXPANSIONfor /L %%i in (1,1,5) do ( set COUNT=%%i echo Licznik: !COUNT!)endlocal
- Wszystkie zmienne ustawione wewnątrz bloku
setlocal
znikają po wywołaniuendlocal
. setlocal
jest automatycznie zakończone na końcu skryptu, jeśli nie użytoendlocal
.- Funkcja przydatna w skryptach, aby uniknąć trwałych zmian zmiennych globalnych.
Najczęściej spotykane błędy i jak je naprawić
Dział zatytułowany „Najczęściej spotykane błędy i jak je naprawić”Błąd / Komunikat | Przyczyna | Rozwiązanie |
---|---|---|
Zmienna nie zachowuje wartości po skrypcie | setlocal ogranicza zakres zmiennych do lokalnego bloku. | Użyj zmiennych poza setlocal lub przypisz ich wartości przed endlocal . |
Nie działa opóźniona ekspansja zmiennych | Brak ENABLEDELAYEDEXPANSION . | Dodaj setlocal ENABLEDELAYEDEXPANSION na początku skryptu. |