C:\WINDOWS>HELP SET
Wyswietla, ustawia i usuwa zmienne srodowiskowe programu cmd.exe.
SET
[zmienna=
[ciag
]]zmienna Okresla nazwe zmiennej srodowiskowej.
ciag Okresla ciag znaków, który ma byc przypisany zmiennej.
Wpisz SET bez parametrów, aby wyswietlic biezace zmienne
srodowiskowe.
Przy wlaczonych rozszerzeniach polecen polecenie SET zmienia sie
nastepujaco:
Polecenie SET wywolane tylko z nazwa zmiennej, bez znaku równosci
lub wartosci
wyswietli wartosc wszystkich zmiennych, których prefiks
odpowiada.
nazwie podanej poleceniu SET. Na przyklad:
SET P
wyswietli wszystkie zmienne, których nazwy zaczynaja sie od
litery 'P'
Polecenie SET nada zmiennej ERRORLEVEL wartosc 1, jesli nazwy tej
zmiennej
nie mozna znalezc w biezacym srodowisku.
Polecenie SET nie zezwala, aby znak równosci (=) byl czescia
nazwy zmiennej.
Do polecenia SET dodano dwa nowe przelaczniki:
SET /A wyrazenie
SET /P zmienna=
[ciag_monitu
]Przelacznik /A mówi, ze ciag po prawej stronie znaku równosci
jest
wyrazeniem numerycznym, które jest obliczane. Program obslugujacy
obliczanie wyrazen jest bardzo prosty i obsluguje nastepujace
operacje
(wymienione wedlug malejacego pierwszenstwa):
() - grupowanie
! ~ - - operatory jednoargumentowe
* / % - operatory arytmetyczne
+ - - operatory arytmetyczne
<< >> - przesuniecie logiczne
& - logiczne "i"
^ - logiczne wylaczne "lub"
| - logiczne "lub"
= *= /= %= += -= - przypisanie
&= ^= |= <<= >>=
, - separator wyrazen
Jesli uzywasz operatorów logicznych lub modulo, ujmij ciag
wyrazenia
w cudzyslów. Wszelkie nie numeryczne ciagi w wyrazeniu sa
traktowane jako
zmienne srodowiskowe, których wartosci, przed ich uzyciem, musza
byc
konwertowane na liczby. Jesli nazwa zmiennej srodowiskowej jest
podana, ale
nie jest okreslona w biezacym srodowisku, to uzywana jest wartosc
zero.
Pozwala to na dzialania arytmetyczne z uzyciem zmiennych
srodowiskowych bez
potrzeby wpisywania znaków %, by uzyskac ich wartosci. Jesli
polecenie
SET /A jest wykonywane z wiersza polecenia poza skryptem polecen,
to wyswietla
ostateczna wartosc wyrazenia. Operator przypisania wymaga nazwy
zmiennej
srodowiska po swojej lewej stronie. Wartosci liczbowe sa liczbami
dziesietnymi, o ile nie sa poprzedzone znakami 0x (wówczas sa 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óc
uwage,
ze zapis ósemkowy moze byc mylacy: 08 i 09 nie sa poprawnymi
liczbami,
poniewaz 8 i 9 nie sa prawidlowymi cyframi ósemkowymi.
Przelacznik /P zezwala na ustawienie wartosci zmiennej dla
wiersza wejscia
wprowadzonego przez uzytkownika. Wyswietla okreslony ciag_monitu
przed
odczytaniem wiersza wejscia. Ciag_monitu moze byc pusty.
Podstawianie zmiennej srodowiskowej zostalo ulepszone:
%PATH:str1=str2%
rozwija zmienna srodowiskowa PATH, podstawiajac kazde wystapienie
"str1"
w rozwinietym wyniku z "str2". "str2" moze byc ciagiem pustym w
celu
efektywnego usuwania wszystkich wystapien ciagu "str1" z
rozwinietego wyjscia.
"str1" moze zaczynac sie od gwiazdki, w przypadku gdy dopasowuje
wszystko od
poczatku rozwinietego wyjscia do pierwszego wystapienia
pozostalej czesci str1.
Mozna równiez okreslic podciagi dla rozwiniecia.
%PATH:~10,5%
rozwinie zmienna srodowiskowa PATH, a nastepnie uzyje tylko 5
znaków
zaczynajacych sie od 11-tego (przesuniecie 10) znaku rozwinietego
wyniku.
Jesli dlugosc nie jest okreslona, wtedy jest domyslnie reszta
wartosci
zmiennej. Jesli takze liczba (przesuniecie lub dlugosc) jest
ujemna, wtedy
uzywana liczba jest dlugosc wartosci zmiennej srodowiskowej
dodanej
do przesuniecia lub okreslonej dlugosci.
%PATH:~-10%
wyodrebni ostatnie 10 znaków zmiennej PATH.
%PATH:~0,-2%
wyodrebni wszystkie oprócz ostatnich 2 znaków zmiennej PATH.
Ostatecznie, dodano obsluge opóznionego rozwijania zmiennych
srodowiskowych.
Obsluga ta jest zawsze wlaczona domyslnie, ale moze byc
wlaczana/wylaczana za
pomoca przelacznika wiersza polecenia /V dla programu CMD.EXE.
Zobacz CMD /?
Opóznione rozwijanie zmiennych srodowiskowych jest uzyteczne do
omijania
ograniczen biezacego rozwiniecia, które maja miejsce gdy wiersz
jest czytany,
a nie kiedy jest wykonywany. Nastepujacy przyklad przedstawia
problem
z rozwinieciem zmiennej natychmiastowej:
set VAR=przed
if "%VAR%" == "przed" (
set VAR=po
if "%VAR%" == "po" @echo Jesli to widzisz, to zadzialalo
)
nigdy nie wyswietli komunikatu, poniewaz %VAR% w instrukcjach
BOTH IF jest
podstawiana, kiedy czytana jest pierwsza instrukcja IF, poniewaz
logicznie
zawiera glówne polecenie IF, które jest instrukcja zlozona.
Dlatego IF
wewnatrz instrukcji zlozonej faktycznie porównuje "przed" z "po",
które nigdy
nie beda sobie równe. Podobnie, nie zadziala nastepujacy
przyklad:
set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%
w którym nie zostanie zbudowana lista plików w katalogu biezacym,
ale zamiast
tego zostanie ustawiona zmienna LIST na ostatni znaleziony plik.
Dzieje sie
tak, poniewaz zmienna %LIST% jest rozwijana tylko raz, kiedy
czytana jest
instrukcja FOR, a w tym czasie zmienna LIST jest pusta.
Faktycznie wykonywana petla FOR jest:
for %i in (*) do set LIST= %i
która ustawia LIST na ostatni znaleziony plik.
Opóznione rozwijanie zmiennych srodowiskowych zezwala na uzywanie
innego
znaku (wykrzyknik) do rozwijania zmiennych srodowiskowych w
czasie
wykonywania. Jesli opóznione rozwijanie zmiennych jest wlaczone,
powyzsze
przyklady mozna zapisac jak ponizej, aby zadzialaly zgodnie z
oczekiwaniami:
set VAR=przed
if "%VAR%" == "przed" (
set VAR=po
if "!VAR!" == "po" @echo Jesli to widzisz, to zadzialalo
)
set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%
Przy wlaczonych rozszerzeniach polecen, istnieje kilka
dynamicznych zmiennych
srodowiskowych, które mozna rozwijac, ale które nie pojawiaja sie
na liscie
zmiennych wyswietlanych przy uzyciu polecenia SET. Te wartosci
zmiennych sa
obliczane dynamicznie za kazdym razem, gdy wartosc zmiennej jest
rozwijana.
Jesli uzytkownik jawnie definiuje zmienna z jedna z tych nazw,
wtedy definicja
ta zastepuje nazwe dynamiczna opisana ponizej:
%CD% - rozwija do ciagu katalogu biezacego.
%DATE% - rozwija do biezacej daty uzywajac tego samego formatu co
polecenie
DATE.
%TIME% - rozwija do biezacego czasu uzywajac tego samego formatu
co
polecenie TIME.
%RANDOM% - rozwija do losowej liczby dziesietnej miedzy 0 a
32767.
%ERRORLEVEL% - rozwija do biezacej wartosci ERRORLEVEL.
%CMDEXTVERSION% - rozwija do biezacej liczby wersji rozszerzen
procesora
polecen.
%CMDCMDLINE% - rozwija do oryginalnego wiersza polecenia, który
wywolal
procesora polecen.
C:\WINDOWS>HELP SETLOCAL
Sprawia, ze zmiany srodowiska w pliku wsadowym beda lokalne.
Zmiany srodowiska dokonane po wydaniu polecenia SETLOCAL sa
lokalne:
dotycza pliku wsadowego. Aby przywrócic poprzednie ustawienia,
nalezy wydac
polecenie ENDLOCAL.
SETLOCAL
Przy wlaczonych rozszerzeniach, polecenie SETLOCAL zmienia sie
nastepujaco:
Polecenie skryptów SETLOCAL akceptuje obecnie dodatkowe
argumenty:
ENABLEEXTENSIONS albo DISABLEEXTENSIONS, umozliwiajace
wlaczenie
lub wylaczenie rozszerzen interpretera polecen. Wiecej
szczególów mozna
znalezc wpisujac polecenie: CMD /?.
ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION,
umozliwiajace wlaczenie
lub wylaczenie opóznionego rozwijania zmiennych
srodowiskowych. Wiecej
szczególów mozna znalezc wpisujac polecenie: SET /?.
Te modyfikacje obowiazuja do momentu napotkania polecenia
ENDLOCAL,
niezaleznie od ich ustawien przed poleceniem SETLOCAL.
Polecenie SETLOCAL ustawia wartosc zmiennej ERRORLEVEL, jezeli
podany zostanie
razem z nim argument. Zmienna otrzyma wartosc 0, jezeli podany
zostal jeden
z dwóch prawidlowych argumentów, lub 1 w pozostalych przypadkach.
Mozna to
wykorzystac w skryptach wsadowych, aby okreslic, czy dostepne sa
rozszerzenia,
uzywajac nastepujacej techniki:
VERIFY OTHER 2>nul
SETLOCAL ENABLEEXTENSIONS
IF ERRORLEVEL 1 echo Wlaczenie rozszerzen bylo niemozliwe
To dziala, poniewaz w starych wersjach CMD.EXE polecenie SETLOCAL
nie
ustawia wartosci ERRORLEVEL. Polecenie VERIFY ze zlym argumentem
inicjalizuje wartosc ERRORLEVEL do wartosci niezerowej.
C:\WINDOWS>HELP SHIFT
Zmienia polozenie wymiennych parametrów w pliku wsadowym.
SHIFT
[/n
]Przy wlaczonych poleceniach rozszerzen polecenie SHIFT obsluguje
przelacznik
/n, którego uzycie powoduje, ze polecenie przesuwa od n-tego
argumentu,
gdzie n moze byc z przedzialu miedzy zero a osiem. Na przyklad:
SHIFT /2
przesunie %3 do %2, %4 do %3 itd. i pozostawi %0 oraz %1.