C:\WINDOWS>HELP SET
Näyttää, asettaa tai poistaa CMD.EXE:n ympäristömuuttujia.
SET
[muuttuja=
[merkkijono
]]muuttuja Määrittää ympäristömuuttujan nimen.
merkkijono Määrittää muuttujan arvoksi annettavan sarjan
merkkejä.
SET ilman parametreja näyttää nykyiset ympäristömuuttujat.
Jos komentolaajennukset ovat käytössä, SET-komento muuttuu
seuraavasti:
Jos SET-komennolle annetaan parametrina muuttujan nimi ilman
yhtäsuuruus-
merkkiä tai arvoa, se näyttää kaikkien muuttujien arvon, joiden
nimi alkaa
SET-komennolle annetun parametrin merkeillä. Esimerkiksi:
SET P
näyttää kaikki ympäristömuuttujat, joiden nimi alkaa kirjaimella
"P".
SET-komento asettaa ERRORLEVEL:n arvoon 1 jos muuttujan arvoa ei
löydy
nykyisestä ympäristöstä.
SET-komento ei salli yhtäsuuruusmerkin (=) käyttöä muuttujassa.
SET-komentoon on lisätty kaksi uutta valitsinta:
SET /A lauseke
SET /P muuttuja=
[promptString
]/A-valitsin edellyttää, että merkkijono yhtäsuuruusmerkin
oikealla
puolella on laskettava numeerinen lauseke. Lausekkeen laskenta on
melko
yksinkertaista. Se tukee seuraavia operaatioita esitettynä
alenevassa
laskentajärjestyksessä:
() - ryhmittely
! ~ - - unaarioperaattorit
* / % - aritmeettiset operaattorit
+ - - aritmeettiset operaattorit
<< >> - looginen siirto
& - bittitason JA
^ - bittitason poissulkeva TAI
| - bittitason TAI
= *= /= %= += -= - sijoitus
&= ^= |= <<= >>=
, - lauseke-erotin
Jos käytetään loogisia tai modulusoperaattoreita, lauseke tulee
sijoittaa
lainausmerkkeihin. Lausekkeessa olevia ei-numeerisia merkkijonoja
käsitellään
ympäristömuuttujina, joiden arvot muunnetaan numeroiksi ennen
käyttöä.
Jos ympäristömuuttujan nimi on annettu mutta ei määritetty
nykyisessä
ympäristössä, arvoa nolla käytetään. Tämä mahdollistaa
aritmeettiset
operaatiot ympäristömuuttujien arvoilla tarvitsematta käyttää %-
merkkejä
niiden arvojen hakemiseen. Jos SET /A suoritetaan komentoriviltä
komentojonotiedoston ulkopuolella, se näyttää lausekkeen
lopullisen
arvon. Sijoitusoperaattori edellyttää ympäristömuuttujan nimeä
sijoitusoperaattorin vasemmalle puolelle. Numeeriset arvot ovat
oletuksena
desimaalilukuja, ellei niitä edellä 0x (heksadesimaali) tai 0
(oktaali).
Täten 0x12 on sama kuin 18, joka on sama kuin 022. Huomaa, että
oktaalinotaatio voi aiheuttaa sekaannusta: 08 ja 09 eivät ole
kelvollisia
lukuja, koska 8 ja 9 eivät ole kelvollisia oktaalinumeroita.
/P-valitsimen avulla voit määrittää muuttujan, jonka käyttäjä
kirjoittaa
komentoriville. Käyttäjälle näytetään kehotemerkkijono ennen
muuttujan
kirjoittamista. Kehotemerkkijono voi olla tyhjä.
Ympäristömuuttujan korvaamista on parannettu seuraavasti:
%PATH:mjono1=mjono2%
laajentaa PATH-ympäristömuuttujan korvaten jokaisen mjono1-
esiintymän
mjono2-esiintymän laajennetulla tuloksella. Mjono2 voi olla
tyhjä,
jolloin se poistaa kaikki mjono1-esiintymät laajennetusta
tulostuksesta.
Mjono1 voi alkaa tähtimerkillä, jolloin se vastaa kaikkea
laajennetun
tulostuksen alusta lähtien ensimmäiseen mjono1:n loppuosan
esiintymään
saakka.
Laajennukselle voidaan määrittää myös alimerkkijonoja.
%PATH:~10,5%
laajentaa PATH-ympäristömuuttujan, mutta käyttää sitten vain 5
merkkiä,
jotka alkavat laajennetun tuloksen 11. merkistä (osoite 10). Jos
pituutta
ei määritetä, niin oletusarvo on muuttujan arvon jäljellä oleva
osa. Jos
jompikumpi luvuista (osoite tai pituus) on negatiivinen,
käytettävä luku
on ympäristömuuttujan pituus lisättynä määritetyn osoitteen tai
pituuden
arvolla.
%PATH:~-10%
purkaa PATH-muuttujan viimeiset 10 merkkiä.
%PATH:~0,-2%
purkaa kaikki paitsi kaksi viimeistä PATH-muuttujan merkkiä.
Viivästetty ympäristömuuttujalaajennus on lisätty. Tämä on
oletusarvoisesti aina poissa käytöstä, mutta voit ottaa sen
käyttöön tai poistaa sen käytöstä Cmd.exe-ohjelman /V-valitsimen
avulla. Katso CMD /?
Viivästetyn ympäristömuuttujalaajennuksen avulla voidaan kiertää
nykyisen laajennuksen rajoitukset, jotka aiheutuvat siitä, että
laajennus tapahtuu tekstiriviä luettaessa eikä riviä
suoritettaessa.
Seuraava esimerkki esittelee ongelman:
set VAR=ennen
if "%VAR%" == "ennen" (
set VAR=jälkeen;
if "%VAR%" == "jälkeen" @echo Jos näet tämän, se toimii
)
ei tuo näyttöön koskaan sanomaa, koska BOTH IF -käskyn %VAR%
korvataan, kun ensimmäinen IF-käsky luetaan, koska se sisältää
loogisesti IF-käskyn perusosan, joka on yhdistelmälause. Joten
IF-käsky yhdistelmälauseen sisällä vertailee todellisuudessa
ennen- ja jälkeen-merkkijonoja, jotka eivät koskaan vastaa
toisiaan. Samoin seuraavakaan esimerkki ei toimi odotetulla
tavalla:
set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%
Esimerkki ei muodosta tiedostojen luetteloa nykyiseen kansioon,
vaan se määrittää LIST-muuttujan viimeiseen löydettyyn
tiedostoon.
Tämä johtuu taas siitä, että %LIST% laajennetaan vain kerran, kun
FOR-käsky luetaan, jolloin LIST-muuttuja on tyhjä.
Joten todellinen suoritettava FOR-silmukka on:
for %i in (*) do set LIST= %i
, joka vain määrittää LIST-muuttujan viimeiselle löydetylle
tiedostolle.
Viivästetyn ympäristömuuttujalaajennuksen avulla voit käyttää eri
merkkiä (huutomerkki) ympäristömuuttujien laajentamiseen
suorituksen
aikana. Jos viivästetty ympäristömuuttujalaajennus on käytössä,
yllä
oleva voidaan kirjoittaa seuraavasti:
set VAR=ennen
if "%VAR%" == "ennen" (
set VAR=jälkeen
if "!VAR!" == "jälkeen" @echo Jos näet tämän, se toimii
oikein
)
set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%
Jos komentolaajennukset ovat käytössä, tällöin käytössä on useita
dynaamisia ympäristömuuttujia, jotka voidaan laajentaa mutta
jotka
eivät näy SET-komennon näyttämässä muuttujien luettelossa. Nämä
muuttuja-arvot lasketaan dynaamisesti joka kerta, kun muuttuja
laajennetaan. Jos käyttäjä määrittää täsmällisesti muuttujan
käyttäen
jotain näistä nimistä, määritys korvaa alla kuvatut dynaamiset
määritykset:
%CD% - Laajentaa nykyisen kansionimen merkkijonon.
%DATE% - Laajentaa nykyisen päivämäärän käyttämällä DATE-komennon
muotoa.
%TIME% - Laajentaa nykyisen ajan käyttämällä TIME-komennon
muotoa.
%RANDOM% - Laajentaa satunnaisen desimaaliluvun 0 - 32767.
%ERRORLEVEL% - Laajentaa nykyisen ERRORLEVEL-arvon
%CMDEXTVERSION% - Laajentaa nykyisen komentosuorittimen
laajennuksen
versionumeron.
%CMDCMDLINE% - laajentaa alkuperäisen komentorivin, joka
käynnisti
komentosuorittimen.
C:\WINDOWS>HELP SETLOCAL
Aloittaa ympäristön paikallisen muuttamisen
komentojonotiedostossa.
SETLOCAL-komennon jälkeen tehdyt ympäristömuutokset ovat
paikallisia
komentojonotiedostolle. Aiemmat asetukset täytyy palauttaa
ENDLOCAL-komennolla. Komentojonotiedoston päättyessä
komentojonossa
määritetyt avoimet SETLOCAL-komennot suljetaan ENDLOCAL-
komennolla.
SETLOCAL
Jos komentolaajennukset ovat käytössä, SETLOCAL-komento muuttuu
seuraavasti:
SETLOCAL-komento hyväksyy valinnaiset argumentit:
ENABLEEXTENSIONS tai DISABLEEXTENSIONS
Ottaa käyttöön tai poistaa käytöstä
komentolaajennukset.
Lisätietoja komennolla CMD /?.
ENABLEDELAYEDEXPANSION tai DISABLEDELAYEDEXPANSION
Ottaa käyttöön tai poistaa käytöstä viivästetyt
ympäristömuuttujalaajennukset. Lisätietoja komennolla
SET /?.
Nämä asetukset ovat voimassa seuraavaan ENDLOCAL-komentoon asti,
riippumatta komentolaajennusten SETLOCAL:ia edeltäneestä
asetuksesta.
Jos SETLOCAL-komennolle antaa argumentin, se asettaa ERRORLEVEL-
arvon.
Arvo on nolla, jos argumentti on tosi, ja muissa tapauksissa
yksi.
Tätä voi käyttää komentojonotiedostoissa selvittämään, ovatko
laajennukset käytettävissä:
VERIFY OTHER 2>nul
SETLOCAL ENABLEEXTENSIONS
IF ERRORLEVEL 1 echo Laajennuksia ei voida ottaa käyttöön
Komento toimii, koska CMD.EXE:n aiemmissa versioissa SETLOCAL ei
aseta
ERRORLEVEL-arvoa. VERIFY-komento virheellisellä argumentilla
alustaa
ERRORLEVEL-arvon nollasta poikkeavaksi.
C:\WINDOWS>HELP SHIFT
Vaihtaa korvattavien parametrien paikkaa komentojonotiedostossa.
SHIFT
[/n
]Jos komentolaajennukset ovat käytössä, SHIFT-komento tukee /n-
valitsinta,
jolloin argumenttien siirto alkaa n:nnestä argumentista.
Muuttujan n arvo
voi olla välillä 0 - 8. Esimerkiksi:
SHIFT /2
siirtää %3:n %2:en, %4:n %3:en jne. %0:n ja %1:n arvot jäävät
ennalleen.