Komentojonoissa käytettävät komennot

Komentojonoissa voidaan käyttää mitä tahansa DOS-komentoja tai ohjelmien nimiä. Seuraavissa luvuissa tutustutaan erityisesti komentojonojen yhteydessä käytettäviin komentoihin, joiden avulla komentojonoista saadaan entistä käyttökelpoisempia.

Tulosteet käyttäjälle - ECHO

ECHO-komennon avulla voidaan ohjata komentojonon tulostetta.

echo [on | off] [viesti] 

Seuraavassa esimerkissä tulostetaan näkyville teksti "Mukavaa päivää!".

Komentojonon ensimmäinen rivi kertoo, että komentojonon komentojen tulostuminen näytölle otetaan pois päältä ja ainoastaan ECHO-komennolle tulostettavat asiat tulevat käyttäjän nähtäville. @-merkki rivin alussa kertoo, että kyseistä riviä ei tulosteta näkyviin. Ilman @-merkkiä ensimmäinen rivi tulisi vielä näkyviin, mutta loput komennot eivät tule näkyviin.

Toisella ja neljännellä rivillä tulostetaan tyhjä rivi näkyville komennolla ECHO. . Kolmannen rivin ECHO-komennolla voidaan tulostaa käyttäjälle haluttu informaatio näkyville.

@ECHO OFF
ECHO. 
ECHO Mukavaa päivää!
ECHO.

Seuraavassa on esitetty komentojonon tulosteet. Korostettu teksti on käyttäjän antama komentojonon kutsu.

C:\cmd>paivaa

Mukavaa päivää!

C:\cmd>

Kommentointi - REM

REM-komennolla voidaan komentojonoon liittää kommentteja, jotka eivät vaikuta komentojonon suorittamiseen.

rem [kommenttiteksti]

REM-komennolla on seuraavassa on liitetty komentojonoon informaatiota komentojonon toiminnasta.

@ECHO OFF
REM HELLO.BAT
REM Komentojono tulostaa tekstin Hello World!
ECHO. 
ECHO Hello World!
ECHO.

Seuraavassa on esitetty edellisen komentojonon tulostamat tekstit.

C:\cmd>hello

Hello World!

C:\cmd>

Komentojonon suorituksen keskeyttäminen - PAUSE

PAUSE-komennolla voidaan keskeyttää komentojonon suoritus. PAUSE-komennolla keskeytyksessä komento tulostaa tekstin "press any key to continue. . .". PAUSE-komento antaa käyttäjälle mahdollisuuden keskeyttää komentojonon suorittaminen CTRL-C-näppäinyhdistelmällä.

Seuraavassa on esitetty yksinkertainen komentojono, joka jää odottamaan käyttäjän toimintaa.

@ECHO OFF
ECHO Jos haluat jatkaa komentojonoa, niin paina "any key"-näppäintä!
ECHO Jos et halua jatkaa, niin paina CTRL-C-näppäinyhdistelmää!
PAUSE
ECHO Löysit "any key"-näppäimen!

C:\cmd>pausetus
Jos haluat jatkaa komentojonoa, niin paina "any key"-näppäintä!
Jos et halua jatkaa, niin paina CTRL-C-näppäinyhdistelmää!
Press any key to continue . . .

Jos käyttäjä painaa mitä tahansa näppäintä, niin komentojono tulostaa lisäksi vielä seuraavan rivin. Jos käyttäjä haluaa keskeyttää komentojonon suorittamisen, niin se onnistuu painamalla CTRL-C-näppäinyhdistelmää.

Löysit "any key"-näppäimen!

Seuraavan esimerkin komentojono tulostaa käyttäjälle informaatiota ja antaa mahdollisuuden keskeyttää toimintansa ennen hakemiston luomista. Esimerkissä PAUSE-komennon tulostus ohjataan suoraan "roskikseen", kuten seuraavassa esimerkissä on tehty. Jos komentojonon toimintaa ei keskeytetä CTRL-C-näppäinyhdistelmällä, niin komentojono luo hakemiston ja tulostaa sen sisällön näkyviin.

@ECHO OFF
ECHO Tehdään hakemisto %1
ECHO Keskeyttääksesi paina CTRL-C!
ECHO Muussa tapauksessa paina mitä tahansa .

PAUSE >NUL
MD %1
DIR %1

Seuraavassa on nähtävillä edellisen komentojonon tulosteet.

C:\cmd>pausetus koe
Tehdään hakemisto koe
Keskeyttääksesi paina CTRL-C!
Muussa tapauksessa paina mitä tahansa .

 Volume in drive C has no label
 Volume Serial Number is 3F3C-1CDA
 Directory of C:\cmd\koe

.              <DIR>        25.10.01   8.57 .
..             <DIR>        25.10.01   8.57 ..
         0 file(s)              0 bytes
         2 dir(s)        3 629.66 MB free
C:\cmd>

Suoritusjärjestyksen muuttaminen - GOTO

Komentojonoissa komennot suoritetaan riveittäin peräkkäin tiedoston alusta aina loppuun saakka. GOTO-komennon avulla voidaan muuttaa komentojonon komentojen suoritusjärjestystä. Komentojonon sisällä voidaan hyppiä paikasta toiseen nimiöiden avulla. GOTO-komennolle annetaan nimiö, johon sen käsketään hypätä. Nimiö merkitään komentojonon sisälle aloittamalla nimiörivi kaksoispisteellä (:), jonka jälkeen välittömästi annetaan nimiön nimi.

goto nimiö
...
:nimio

GOTO-komennon käyttäminen on välttämätöntä vähänkin monimutkaisemmissa komentojonoissa. DOS-komentojonoissa ei ole samanlaisia silmukkarakenteita kuin ohjelmointikielissä, joten sen vuoksi joudutaan käyttämään GOTO-rakenteita.

Seuraavassa esimerkissä on ikuinen silmukka, joka saadaan keskeytettyä CTRL-C-näppäinyhdistelmällä. GOTO-komennolla hypätään takaisin kohtaan:alku kolmannelle riville.

@ECHO OFF

:alku 
ECHO Ikuinen silmukka :)
ECHO CTRL-C keskeyttää!!

PAUSE 
GOTO alku 

Seuraavassa on esiteltynä edellisen esimerkin toimintaa. GOTO-silmukka käytiin kaksi kertaa läpi, jonka jälkeen sen suoritus keskeytettiin CTRL-C-näppäinyhdistelmällä.

C:\cmd>silmukka
Ikuinen silmukka :)
CTRL-C keskeyttää!!
Press any key to continue . . .

Ikuinen silmukka :)
CTRL-C keskeyttää!!
Press any key to continue . . .
^C

Terminate batch job (Y/N)?y

C:\cmd>

Tarkempi ja hieman kehittyneempi esimerkki GOTO-komennon käytöstä löytyy IF-komennon esimerkistä.

Ehtolauseet - IF

IF-komennolla voidaan komentojonon toimintaa ehdollistaa. IF-komento on hyvin monipuolinen komento, jolla voidaan testata esimerkiksi merkkijonojen yhtä suuruutta.

if [not] merkkijono1==merkkijono2 komento

IF-komennon avulla voidaan myös testata tiedostojen ja hakemistojen olemassaoloa. Hakemiston olemassa olon testaaminen Windows 95:ssä aiheuttaa komentoon pienen lisän. Hakemistoa täytyy testata muodossa HAKEMISTO\NUL, koska pelkällä hakemistonimellä testaaminen ei onnistu.

if [not] exist tiedostonimi komento

IF-komennolla voidaan myös testata komentojen ja ohjelmien antamia palautusarvoja.

if [not] errorlevel numero komento

Seuraavassa esimerkissä toisella rivillä testataan IF-komennolla onko komentojonolle annettu parametria. Jos parametria ei ole annettu, niin hypätään kohtaan :puuttuu ja tulostetaan käyttäjälle informaatiota asiasta.

Jos parametri on annettu, niin jatketaan kolmannelle riville, jossa testataan parametrina annettavan hakemiston olemassaolo. Jos hakemisto on olemassa, niin hypätään kohtaan :virhe, jossa käyttäjälle kerrotaan tapahtuneesta. '

Virheen tulostamisen jälkeen tehdään uusi hyppy kohtaan :loppu, joka on komentojonon viimeinen rivi. Jos parametrina annettu hakemisto ei ollut olemassa, niin jatketaan komentojonoa riveittäin alas ja tehdään hakemisto rivillä 5. Hakemiston tekemisen jälkeen kerrotaan asiasta käyttäjälle ja hypätään komentojonon kohtaan :loppu.

@ECHO OFF 
IF "%1"=="" GOTO puuttuu
IF EXIST %1 GOTO virhe

MKDIR %1
ECHO Hakemisto %1 tehty!
GOTO loppu

:virhe
ECHO Hakemisto on jo olemassa! 
ECHO Ei voida tehdä!
GOTO loppu

:puuttuu
ECHO Et antanut parametria!
ECHO Komento on annettava muodossa:
ECHO TEEIF hakemistonimi
:loppu

Komentojonon lopettaminen - EXIT

Komentojonon suoritus voidaan keskeyttää kesken suorituksen EXIT-komennolla. Jos komentojonon suoritus keskeytetään EXIT-komennolla, niin komentokehoteikkuna suljetaan kokonaan. Tällöin käyttäjä ei saa tarvittavaa informaatiota. Edellä olleen IF-esimerkin GOTO loppu tekstien paikalla voitaisiin käyttää EXIT-komentoa.

Silmukkarakenteet - FOR

FOR-komennon avulla voidaan käsitellä erikseen jokainen joukkona annetusta tiedostosta. Esimerkiksi jokerimerkkien avulla annettu parametri voidaan käydä läpi tiedostoittain. Seuraavassa FOR-komennon syntaksi:

for %%muuttuja in (joukko) do komento 

Seuraavassa yksinkertaisessa esimerkissä käydään läpi kaikki txt-päätteiset tiedostot ja tulostetaan niiden sisältö näytölle.

for %%f in (*.txt) do type %%f

Seuraavassa esimerkissä tulostetaan näkyville kaikki ensimmäisenä parametrina annettujen tiedostojen sisältö. Esimerkiksi parametrina on voitu antaa *.txt, jolloin jokainen hakemistossa ollut txt-päätteinen tiedosto tulostetaan näytölle yksi kerrallaan, kuten edellisessä esimerkissä.

for %%f in (%1) do type %%f

Seuraavassa esimerkissä on käytetty FOR-komentoa edellisen esimerkin tapaan. Poikkeuksena edelliseen on, että komentojono tulostaa bat-päätteiset tiedostot suoraan annetun tiedoston loppuun. Tämän lisäksi komentojono kirjoittaa näytölle sen tiedoston nimen, jota ollaan käsittelemässä. Kahden komennon suorittaminen on mahdollistettu &-merkin avulla. Tämä onnistuu ainakin Windows 2000:ssa, mutta ei esimerkiksi Windows 95:ssä.

@ECHO OFF
FOR %%k IN (*.bat) DO TYPE %%k >> batit.txt & ECHO %%k

Komentojono tulostaa näytölle seuraavaa:

U:\LAITT~PN\cmd>kooste
hello.bat
kopioi.bat
ikuinen.bat
kooste.bat

Windows 2000 tuo mukanaan muutamia laajennuksia, jotka ovat erityisen käyttökelpoisia. FOR-komennon avulla voidaan esimerkiksi parsia tiedostoja sekä näyttää tiedostoista haluttuja informaatioita. Perinteisessä DOSissa tällaiset olisivat vaatineet erillisten apuohjelmien käyttöä
ja kohtuullisen hankalia komentojonoja.

Seuraavassa esimerkissä parsitaan tiedostoa. Tiedoston tiedot on jaettu sarakkeisiin ja sarakkeiden erotinmerkiksi on laitettu pystyviiva (|) seuraavan esimerkin mukaisesti.

koe | koe2 | koe3 | koe 4
koe | koe2 | koe3 | koe 4
koe | koe2 | koe3 | koe 4

Seuraavassa komentoriviltä suoraan käytetyllä FOR-komennolla toteutettu tiedoston parsiminen, jossa tulostetaan toinen ja neljäs sarake tiedostosta.

FOR /F "tokens=2,4 delims=|" %i in (koe.txt) do @echo %i %j

Komento tulostaa sarakkeet seuraavasti:

koe2   koe 4
koe2   koe 4
koe2   koe 4

FOR-komennolle löytyy mukava laajennus tiedostolistauksen parsimiseen. Seuraavassa esimerkissä tulostetaan oletushakemiston tiedostojen muutospäivämäärä ja tiedostonimi ilman päätettä.

FOR %f in (*.*) do @echo %~tf %~nf

Seuraavassa edellisen esimerkin tulosteet:

U:\LAITT~PN\cmd>FOR %f in (*.*) do @echo %~tf %~nf
07.11.01 08:27  kooste
29.10.01 13:51  muuttuja
31.10.01 11:17  koe
29.10.01 11:41  koe
29.10.01 13:11  kopioi
07.11.01 08:27  batit
29.10.01 14:12  kaikki
07.11.01 07:46  koetus
29.10.01 10:08  ikuinen
29.10.01 16:05  tiedosto
29.10.01 13:51  hello

Tarkemmin FOR-komennon parametreihin ja mahdollisuuksiin kannattaa tutustua FOR-komennon opasteen avulla. Täydellisen opasteen saa näkyviin komentoriviltä komennolla FOR /? | MORE.

Parametrien siirtäminen - SHIFT

SHIFT-komento mahdollistaa komentojonoissa enemmän kuin yhdeksän parametrin käytön. Komentoa ei useinkaan tarvita, koska
komentojonolle joutuu harvoin antamana edes yhdeksää parametria. SHIFT-komento siirtää kaikkia parametreja yhden taaksepäin eli %2 parametrista tulee %1 parametri. Seuraavassa SHIFT-komennon syntaksi:

shift 

Seuraavassa esimerkissä tuhotaan kaikki parametrina annettavat tiedostot. SHIFT-komennon käyttö mahdollistaa jokaisen parametrina annetun tiedoston tuhoamisen yksitellen. Jokaisen tiedoston tuhoamisen yhteydessä kysytään varmistus tuhoamiselle. Välissä olevalla IF-komennolla saadaan katkaistua komentojonon suoritus, jos parametrit loppuvat. Muuten kysymyksessä olisi ikuinen silmukka.

@ECHO OFF

:alku

IF "%1"=="" goto loppu

ECHO Tuhotaan %1
ECHO Paina jotakin näppäintä jatkaaksesi...
ECHO Painamalla CTRL-C voit keskeyttää tapahtuman!

PAUSE > NUL
DEL %1
SHIFT
GOTO alku

:loppu

Toisen komentojonon kutsuminen - CALL

CALL-komennolla voidaan kutsua komentojonon sisältä toista komentojonoa. Komentojonoa kutsuttaessa täytyy antaa komentojonon paikka ja nimi sekä komentojonoon liittyvät parametrit. Esimerkiksi seuraavasti:

call komentojonon_nimi parametrit

CALL-komentoa käytettäessä komentojonon kutsumisen jälkeen suoritus palautetaan kutsuvaan komentojonoon. Ilman CALL-komentoa suoritus loppuisi kutsutun komentojonon suorittamisen jälkeen.

Ympäristömuuttujien käyttäminen

Komennolla SET voidaan tulostaa, muuttaa tai asettaa ympäristömuuttujien arvoja. Komentorivillä SET-komento näyttää kaikki määritellyt ympäristömuuttujat. Jos halutaan muuttaa jotakin olemassa olevaa ympäristömuuttujaa, niin muuttaminen tehdään seuraavan esimerkin mukaisesti. Esimerkissä PATH-ympäristömuuttuja sisältää tiedon hakemistoista, joista etsitään ajettavia ohjelmia, jollei sitä löydy oletushakemistosta. SET-komennolla PATH-ympäristömuuttujalle voidaan asettaa arvo yhtä suuruus-merkin avulla. Yhtäsuuruus merkin jälkeen annetaan %path%, jolla asetetaan arvoksi tämän hetkisen PATH-muuttujan arvo ja sen perään tulee uusi hakemisto. Hakemistojen välisenä erottimena toimii puolipiste. Seuraavassa esimerkki uuden polun lisäämisestä PATH-muuttujaan.

set PATH=%PATH%;C:\HAKEMISTO\

Seuraavassa esimerkissä käytetään SET-komentoa ottamaan talteen parametrina tuotu arvo. Esimerkissä testataan parametrien olemassaolo ja tarvittaessa tehdään hakemisto, jonne parametrina annetut tiedostot kopioidaan. Tämän jälkeen kopioidaan jokaisen parametrin osoittama tiedosto kohdehakemistoon niin kauan kuin parametreja riittää. Seuraava komentojono on tallennettu nimelle TEESET.bat.

@ECHO OFF

REM Testataan oliko ensimmäistä parametriä
IF "%1"=="" GOTO para

REM Testataan oliko toista parametriä
IF "%2"=="" GOTO para

REM Alustetaan kohde-niminen muuttuja
set kohde=%1

REM Testataan hekemiston olemassaoloa
IF EXIST %1 GOTO kopioi
ECHO Tehdään hakemisto %1
MD %1

:kopioi
IF "%2"=="" GOTO loppu

REM Kopioidaan tiedosto kohde-muuttujan ilmaisemaan hakemistoon
COPY %2 %kohde%
SHIFT
GOTO kopioi

:para
ECHO Et antanut riittävästi parametrejä komentojonolle!
ECHO Kutsu komentojonoa muodossa:
ECHO TEESET hakemistonimi tiedosto1 [tiedosto2 tiedosto3 .. tiedostoN]
:loppu
Kurssimateriaalien käyttäminen kaupallisiin tarkoituksiin tai opetusmateriaalina ilman lupaa on ehdottomasti kielletty!
Copyright © Tommi Lahtonen (tommi.j.lahtonen@jyu.fi)<URL: http://www.iki.fi/hazor/>
Petri Heinonen (peheinon@mit.jyu.fi)<URL: http://www.mit.jyu.fi/peheinon/>