Komentojonoissa käytettävät komennot
- Tulosteet käyttäjälle - ECHO
- Kommentointi - REM
- Komentojonon suorituksen keskeyttäminen - PAUSE
- Suoritusjärjestyksen muuttaminen - GOTO
- Ehtolauseet - IF
- Komentojonon lopettaminen - EXIT
- Silmukkarakenteet - FOR
- Parametrien siirtäminen - SHIFT
- Toisen komentojonon kutsuminen - CALL
- Ympäristömuuttujien käyttäminen
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