set to wbudowane polecenie interpretera cmd.exe w Windows, które zarządza zmiennymi środowiskowymi bieżącej sesji. Używasz go, gdy chcesz zobaczyć, jaką wartość ma PATH albo TEMP, podstawić własną zmienną do skryptu .bat, albo szybko coś policzyć bez odpalania kalkulatora. Jedno zapamiętaj od razu: wszystko, co ustawisz przez set, żyje tylko do zamknięcia okna konsoli. To nie jest trwała konfiguracja systemu — od tego jest setx.
Składnia i najważniejsze opcje
Podstawowa składnia: set [zmienna[=[wartość]]]
set(bez argumentów) — wypisuje wszystkie zmienne środowiskowe sesji.set nazwa— pokazuje wszystkie zmienne, których nazwa zaczyna się od podanego prefiksu (np.set PApokażePATHiPATHEXT).set nazwa=wartość— tworzy lub nadpisuje zmienną.set nazwa=— usuwa zmienną (pusta wartość po znaku równości kasuje ją całkowicie).set /A wyrażenie— traktuje prawą stronę jako wyrażenie arytmetyczne i je oblicza (operatory+ - * / %, przesunięcia bitowe, nawiasy).set /P zmienna=tekst— wyświetla tekst zachęty i wczytuje do zmiennej linię wpisaną przez użytkownika.
Przykłady użycia
set— zrzuca całą listę zmiennych; dobre na start, gdy szukasz, jak coś się nazywa.set PROJEKT=C:\repo\learningzone— tworzy zmienną, do której odwołasz się później jako%PROJEKT%.set PATH=%PATH%;C:\narzedzia— dokleja nowy katalog do istniejącej ścieżki, nie kasując starej zawartości.set /A wynik=(4+6)*2— liczy wyrażenie i zapisuje20do zmiennejwynik.set /P login=Podaj login:— wyświetla monit i wczytuje to, co wpiszesz, do zmiennejlogin; klasyk w interaktywnych skryptach.
Częste błędy i pułapki
Największy klasyk to spacje wokół znaku równości. set VAR = 5 tworzy zmienną o nazwie VAR (ze spacją!) i wartości 5 — nie o to ci chodziło. Pisz set VAR=5 bez spacji. Druga pułapka to cudzysłowy: set VAR="tekst" zapisze cudzysłowy jako część wartości. Gdy wartość ma spacje, ujmij w cudzysłów całość razem z nazwą: set "VAR=tekst ze spacjami" — wtedy cudzysłowy nie wejdą do wartości.
Pamiętaj też, że set to komenda cmd.exe, a nie PowerShella — w PowerShellu zmienną środowiskową ustawisz przez $env:VAR="wartosc", nie przez set. I najważniejsze: zmiany są ulotne. Zamkniesz okno i po zmiennej. Do trwałego zapisu (w rejestrze użytkownika) potrzebujesz setx — ten z kolei ma limit długości i NIE udostępnia świeżej wartości w oknie, w którym ją ustawiłeś. Drobiazg na koniec: set z cmd to nie to samo co set w bashu na Linuksie — tam to zupełnie inne polecenie.
Powiązane polecenia: setx, echo, path, setlocal, endlocal.