Wyświetla, ustawia i usuwa zmienne środowiskowe programu cmd.exe.
SET [zmienna=[ciąg]]
zmienna Określa nazwę zmiennej środowiskowej.
ciąg Określa ciąg znaków, który ma być przypisany zmiennej.
Wpisz SET bez parametrów, aby wyświetlić bieżące zmienne środowiskowe.
Przy włączonych rozszerzeniach poleceń polecenie SET zmienia się następująco:
Polecenie SET wywołane tylko z nazwą zmiennej, bez znaku równości lub wartości
wyświetli wartość wszystkich zmiennych, których prefiks odpowiada.
nazwie podanej poleceniu SET. Na przykład:
SET P
wyświetli wszystkie zmienne, których nazwy zaczynają się od litery 'P'
Polecenie SET nada zmiennej ERRORLEVEL wartość 1, jeśli nazwy tej zmiennej
nie można znaleźć w bieżącym środowisku.
Polecenie SET nie zezwala, aby znak równości (=) był częścią nazwy zmiennej.
Do polecenia SET dodano dwa nowe przełączniki:
SET /A wyrażenie
SET /P zmienna=[ciąg_monitu]
Przełącznik /A mówi, że ciąg po prawej stronie znaku równości jest
wyrażeniem numerycznym, które jest obliczane. Program obsługujący
obliczanie wyrażeń jest bardzo prosty i obsługuje następujące operacje
(wymienione według malejącego pierwszeństwa):
() - grupowanie
! ~ - - operatory jednoargumentowe
* / % - operatory arytmetyczne
+ - - operatory arytmetyczne
<< >> - przesunięcie logiczne
& - logiczne "i"
^ - logiczne wyłączne "lub"
| - logiczne "lub"
= *= /= %= += -= - przypisanie
&= ^= |= <<= >>=
, - separator wyrażeń
Jeśli używasz operatorów logicznych lub modulo, ujmij ciąg wyrażenia
w cudzysłów. Wszelkie nie numeryczne ciągi w wyrażeniu są traktowane jako
zmienne środowiskowe, których wartości, przed ich użyciem, muszą być
konwertowane na liczby. Jeśli nazwa zmiennej środowiskowej jest podana, ale
nie jest określona w bieżącym środowisku, to używana jest wartość zero.
Pozwala to na działania arytmetyczne z użyciem zmiennych środowiskowych bez
potrzeby wpisywania znaków %, by uzyskać ich wartości. Jeśli polecenie
SET /A jest wykonywane z wiersza polecenia poza skryptem poleceń, to wyświetla
ostateczną wartość wyrażenia. Operator przypisania wymaga nazwy zmiennej
środowiska po swojej lewej stronie. Wartości liczbowe są liczbami
dziesiętnymi, o ile nie są poprzedzone znakami 0x (wówczas są to liczby
w postaci szesnastkowej), 0b (liczby dwójkowe) lub 0 (liczby ósemkowe).
Zatem 0x12 jest tym samym co 0b10010 i tym samym co 022. Zwróć uwagę,
że zapis ósemkowy może być mylący: 08 i 09 nie są poprawnymi liczbami,
ponieważ 8 i 9 nie są prawidłowymi cyframi ósemkowymi.
Przełącznik /P zezwala na ustawienie wartości zmiennej dla wiersza wejścia
wprowadzonego przez użytkownika. Wyświetla określony ciąg_monitu przed
odczytaniem wiersza wejścia. Ciąg_monitu może być pusty.
Podstawianie zmiennej środowiskowej zostało ulepszone:
%PATH:str1=str2%
rozwija zmienną środowiskową PATH, podstawiając każde wystąpienie "str1"
w rozwiniętym wyniku z "str2". "str2" może być ciągiem pustym w celu
efektywnego usuwania wszystkich wystąpień ciągu "str1" z rozwiniętego wyjścia.
"str1" może zaczynać się od gwiazdki, w przypadku gdy dopasowuje wszystko od
początku rozwiniętego wyjścia do pierwszego wystąpienia pozostałej części str1.
Można również określić podciągi dla rozwinięcia.
%PATH:~10,5%
rozwinie zmienną środowiskową PATH, a następnie użyje tylko 5 znaków
zaczynających się od 11-tego (przesunięcie 10) znaku rozwiniętego wyniku.
Jeśli długość nie jest określona, wtedy jest domyślnie resztą wartości
zmiennej. Jeśli także liczba (przesunięcie lub długość) jest ujemna, wtedy
używaną liczbą jest długość wartości zmiennej środowiskowej dodanej
do przesunięcia lub określonej długości.
%PATH:~-10%
wyodrębni ostatnie 10 znaków zmiennej PATH.
%PATH:~0,-2%
wyodrębni wszystkie oprócz ostatnich 2 znaków zmiennej PATH.
Ostatecznie, dodano obsługę opóźnionego rozwijania zmiennych środowiskowych.
Obsługa ta jest zawsze włączona domyślnie, ale może być włączana/wyłączana za
pomocą przełącznika wiersza polecenia /V dla programu CMD.EXE. Zobacz CMD /?
Opóźnione rozwijanie zmiennych środowiskowych jest użyteczne do omijania
ograniczeń bieżącego rozwinięcia, które mają miejsce gdy wiersz jest czytany,
a nie kiedy jest wykonywany. Następujący przykład przedstawia problem
z rozwinięciem zmiennej natychmiastowej:
set VAR=przed
if "%VAR%" == "przed" (
set VAR=po
if "%VAR%" == "po" @echo Jeśli to widzisz, to zadziałało
)
nigdy nie wyświetli komunikatu, ponieważ %VAR% w instrukcjach BOTH IF jest
podstawiana, kiedy czytana jest pierwsza instrukcja IF, ponieważ logicznie
zawiera główne polecenie IF, które jest instrukcją złożoną. Dlatego IF
wewnątrz instrukcji złożonej faktycznie porównuje "przed" z "po", które nigdy
nie będą sobie równe. Podobnie, nie zadziała następujący przykład:
set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%
w którym nie zostanie zbudowana lista plików w katalogu bieżącym, ale zamiast
tego zostanie ustawiona zmienna LIST na ostatni znaleziony plik. Dzieje się
tak, ponieważ zmienna %LIST% jest rozwijana tylko raz, kiedy czytana jest
instrukcja FOR, a w tym czasie zmienna LIST jest pusta.
Faktycznie wykonywaną pętlą FOR jest:
for %i in (*) do set LIST= %i
która ustawia LIST na ostatni znaleziony plik.
Opóźnione rozwijanie zmiennych środowiskowych zezwala na używanie innego
znaku (wykrzyknik) do rozwijania zmiennych środowiskowych w czasie
wykonywania. Jeśli opóźnione rozwijanie zmiennych jest włączone, powyższe
przykłady można zapisać jak poniżej, aby zadziałały zgodnie z oczekiwaniami:
set VAR=przed
if "%VAR%" == "przed" (
set VAR=po
if "!VAR!" == "po" @echo Jeśli to widzisz, to zadziałało
)
set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%
Przy włączonych rozszerzeniach poleceń istnieje kilka dynamicznych zmiennych
środowiskowych, które można rozwijać, ale które nie pojawiają się na liście
zmiennych wyświetlanych przy użyciu polecenia SET. Te wartości zmiennych są
obliczane dynamicznie za każdym razem, gdy wartość zmiennej jest rozwijana.
Jeśli użytkownik jawnie definiuje zmienną o jednej z tych nazw, definicja
ta zastępuje nazwę dynamiczną opisaną poniżej:
%CD% - rozwija do ciągu katalogu bieżącego.
%DATE% - rozwija do bieżącej daty, używając tego samego formatu co polecenie
DATE.
%TIME% - rozwija do bieżącego czasu, używając tego samego formatu co
polecenie TIME.
%RANDOM% - rozwija do losowej liczby dziesiętnej między 0 a 32767.
%ERRORLEVEL% - rozwija do bieżącej wartości ERRORLEVEL.
%CMDEXTVERSION% - rozwija do bieżącej liczby wersji rozszerzeń procesora
poleceń.
%CMDCMDLINE% - rozwija do oryginalnego wiersza polecenia, który wywołał
procesor poleceń.
%HIGHESTNUMANODENUMBER% - rozwija do najwyższego numeru węzła NUMA
na komputerze.
źródło: Pomoc systemowa Microsoft Windows 7 (net set)
SET [zmienna=[ciąg]]
zmienna Określa nazwę zmiennej środowiskowej.
ciąg Określa ciąg znaków, który ma być przypisany zmiennej.
Wpisz SET bez parametrów, aby wyświetlić bieżące zmienne środowiskowe.
Przy włączonych rozszerzeniach poleceń polecenie SET zmienia się następująco:
Polecenie SET wywołane tylko z nazwą zmiennej, bez znaku równości lub wartości
wyświetli wartość wszystkich zmiennych, których prefiks odpowiada.
nazwie podanej poleceniu SET. Na przykład:
SET P
wyświetli wszystkie zmienne, których nazwy zaczynają się od litery 'P'
Polecenie SET nada zmiennej ERRORLEVEL wartość 1, jeśli nazwy tej zmiennej
nie można znaleźć w bieżącym środowisku.
Polecenie SET nie zezwala, aby znak równości (=) był częścią nazwy zmiennej.
Do polecenia SET dodano dwa nowe przełączniki:
SET /A wyrażenie
SET /P zmienna=[ciąg_monitu]
Przełącznik /A mówi, że ciąg po prawej stronie znaku równości jest
wyrażeniem numerycznym, które jest obliczane. Program obsługujący
obliczanie wyrażeń jest bardzo prosty i obsługuje następujące operacje
(wymienione według malejącego pierwszeństwa):
() - grupowanie
! ~ - - operatory jednoargumentowe
* / % - operatory arytmetyczne
+ - - operatory arytmetyczne
<< >> - przesunięcie logiczne
& - logiczne "i"
^ - logiczne wyłączne "lub"
| - logiczne "lub"
= *= /= %= += -= - przypisanie
&= ^= |= <<= >>=
, - separator wyrażeń
Jeśli używasz operatorów logicznych lub modulo, ujmij ciąg wyrażenia
w cudzysłów. Wszelkie nie numeryczne ciągi w wyrażeniu są traktowane jako
zmienne środowiskowe, których wartości, przed ich użyciem, muszą być
konwertowane na liczby. Jeśli nazwa zmiennej środowiskowej jest podana, ale
nie jest określona w bieżącym środowisku, to używana jest wartość zero.
Pozwala to na działania arytmetyczne z użyciem zmiennych środowiskowych bez
potrzeby wpisywania znaków %, by uzyskać ich wartości. Jeśli polecenie
SET /A jest wykonywane z wiersza polecenia poza skryptem poleceń, to wyświetla
ostateczną wartość wyrażenia. Operator przypisania wymaga nazwy zmiennej
środowiska po swojej lewej stronie. Wartości liczbowe są liczbami
dziesiętnymi, o ile nie są poprzedzone znakami 0x (wówczas są to liczby
w postaci szesnastkowej), 0b (liczby dwójkowe) lub 0 (liczby ósemkowe).
Zatem 0x12 jest tym samym co 0b10010 i tym samym co 022. Zwróć uwagę,
że zapis ósemkowy może być mylący: 08 i 09 nie są poprawnymi liczbami,
ponieważ 8 i 9 nie są prawidłowymi cyframi ósemkowymi.
Przełącznik /P zezwala na ustawienie wartości zmiennej dla wiersza wejścia
wprowadzonego przez użytkownika. Wyświetla określony ciąg_monitu przed
odczytaniem wiersza wejścia. Ciąg_monitu może być pusty.
Podstawianie zmiennej środowiskowej zostało ulepszone:
%PATH:str1=str2%
rozwija zmienną środowiskową PATH, podstawiając każde wystąpienie "str1"
w rozwiniętym wyniku z "str2". "str2" może być ciągiem pustym w celu
efektywnego usuwania wszystkich wystąpień ciągu "str1" z rozwiniętego wyjścia.
"str1" może zaczynać się od gwiazdki, w przypadku gdy dopasowuje wszystko od
początku rozwiniętego wyjścia do pierwszego wystąpienia pozostałej części str1.
Można również określić podciągi dla rozwinięcia.
%PATH:~10,5%
rozwinie zmienną środowiskową PATH, a następnie użyje tylko 5 znaków
zaczynających się od 11-tego (przesunięcie 10) znaku rozwiniętego wyniku.
Jeśli długość nie jest określona, wtedy jest domyślnie resztą wartości
zmiennej. Jeśli także liczba (przesunięcie lub długość) jest ujemna, wtedy
używaną liczbą jest długość wartości zmiennej środowiskowej dodanej
do przesunięcia lub określonej długości.
%PATH:~-10%
wyodrębni ostatnie 10 znaków zmiennej PATH.
%PATH:~0,-2%
wyodrębni wszystkie oprócz ostatnich 2 znaków zmiennej PATH.
Ostatecznie, dodano obsługę opóźnionego rozwijania zmiennych środowiskowych.
Obsługa ta jest zawsze włączona domyślnie, ale może być włączana/wyłączana za
pomocą przełącznika wiersza polecenia /V dla programu CMD.EXE. Zobacz CMD /?
Opóźnione rozwijanie zmiennych środowiskowych jest użyteczne do omijania
ograniczeń bieżącego rozwinięcia, które mają miejsce gdy wiersz jest czytany,
a nie kiedy jest wykonywany. Następujący przykład przedstawia problem
z rozwinięciem zmiennej natychmiastowej:
set VAR=przed
if "%VAR%" == "przed" (
set VAR=po
if "%VAR%" == "po" @echo Jeśli to widzisz, to zadziałało
)
nigdy nie wyświetli komunikatu, ponieważ %VAR% w instrukcjach BOTH IF jest
podstawiana, kiedy czytana jest pierwsza instrukcja IF, ponieważ logicznie
zawiera główne polecenie IF, które jest instrukcją złożoną. Dlatego IF
wewnątrz instrukcji złożonej faktycznie porównuje "przed" z "po", które nigdy
nie będą sobie równe. Podobnie, nie zadziała następujący przykład:
set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%
w którym nie zostanie zbudowana lista plików w katalogu bieżącym, ale zamiast
tego zostanie ustawiona zmienna LIST na ostatni znaleziony plik. Dzieje się
tak, ponieważ zmienna %LIST% jest rozwijana tylko raz, kiedy czytana jest
instrukcja FOR, a w tym czasie zmienna LIST jest pusta.
Faktycznie wykonywaną pętlą FOR jest:
for %i in (*) do set LIST= %i
która ustawia LIST na ostatni znaleziony plik.
Opóźnione rozwijanie zmiennych środowiskowych zezwala na używanie innego
znaku (wykrzyknik) do rozwijania zmiennych środowiskowych w czasie
wykonywania. Jeśli opóźnione rozwijanie zmiennych jest włączone, powyższe
przykłady można zapisać jak poniżej, aby zadziałały zgodnie z oczekiwaniami:
set VAR=przed
if "%VAR%" == "przed" (
set VAR=po
if "!VAR!" == "po" @echo Jeśli to widzisz, to zadziałało
)
set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%
Przy włączonych rozszerzeniach poleceń istnieje kilka dynamicznych zmiennych
środowiskowych, które można rozwijać, ale które nie pojawiają się na liście
zmiennych wyświetlanych przy użyciu polecenia SET. Te wartości zmiennych są
obliczane dynamicznie za każdym razem, gdy wartość zmiennej jest rozwijana.
Jeśli użytkownik jawnie definiuje zmienną o jednej z tych nazw, definicja
ta zastępuje nazwę dynamiczną opisaną poniżej:
%CD% - rozwija do ciągu katalogu bieżącego.
%DATE% - rozwija do bieżącej daty, używając tego samego formatu co polecenie
DATE.
%TIME% - rozwija do bieżącego czasu, używając tego samego formatu co
polecenie TIME.
%RANDOM% - rozwija do losowej liczby dziesiętnej między 0 a 32767.
%ERRORLEVEL% - rozwija do bieżącej wartości ERRORLEVEL.
%CMDEXTVERSION% - rozwija do bieżącej liczby wersji rozszerzeń procesora
poleceń.
%CMDCMDLINE% - rozwija do oryginalnego wiersza polecenia, który wywołał
procesor poleceń.
%HIGHESTNUMANODENUMBER% - rozwija do najwyższego numeru węzła NUMA
na komputerze.
źródło: Pomoc systemowa Microsoft Windows 7 (net set)