Seuraavissa luvuissa käsitellään DOS-komentojonoja. Komentojono on nimensä mukaisesti jono komentoja. Seuraavissa luvuissa käsiteltävät komentojonot eivät ole puhtaasti DOS-komentojonoja, koska "puhdasta" DOSia käytetään nykyisin hyvin vähän. Tämän vuoksi esimerkkeihin ja komentoihin on otettu mukaan Windows 2000, NT ja 95:n mukaan tuomia ominaisuuksia.
DOS-komentojonot olivat erityisen merkittäviä ja käyttökelpoisia DOSin ja Windows3.1:n aikaan, mutta nykyisinkin niiden avulla voidaan tehdä Windows-ympäristössä erilaisia ylläpidollisia toimia. Komentojonojen avulla on kohtuullisen helppoa toteuttaa usein toistuvia toimintoja, kuten esimerkiksi varmuuskopiointia. Komentojonojen avulla voidaan myös tehostaa erilaisia kopiointitoimia sekä ohjelmien ajamista. Ohjelmissa on paljon parametreja, joiden avulla voidaan ohjata ohjelman toimintaa. Jos ohjelmaa ajetaan usein samoilla parametreilla, niin ohjelmakutsun ja sen parametrien tekeminen komentojonoksi voi olla hyvä ratkaisu.
Seuraavassa tutustutaan komentojonotiedoston sisältöön. Komentojonotiedosto on tavallinen ASCII-tekstitiedosto, joka nimetään päätteelle .BAT tai .CMD. Komentojonotiedosto voi sisältää tavallisia DOS-komentoja sekä ajettavien ohjelmien nimiä. Jokainen yksittäinen komentojonotiedoston rivi sisältää jonkin DOS-komennon.
Seuraavassa esimerkissä on tehty yksinkertainen komentojono, jonka avulla voidaan siirtyä ennalta määrättyyn hakemistoon ja tulostaa hakemiston sisältö ruutu kerrallaan. Komentojonon tiedot tallennetaan vaihda.bat -nimiseen tiedostoon, jonka jälkeen komentojono voidaan ajaa komennolla vaihda. Tiedoston päätettä ei tarvitse antaa, koska käyttöjärjestelmä etsii hakemistosta .com , -exe, -cmd ja .bat -päätteisiä tiedostoja oletushakemistosta. Komentojono ajetaan kirjoittamalla komentoriville komentojonon nimi ja sen vaatimat parametrit. Ajettaessa tehty komentojono täytyy olla oletushakemistossa tai PATH-polkumuuttujasta täytyy löytyä viittaus hakemistoon, jossa komentojonot sijaitsevat.
Komentojonon ensimmäisellä rivillä vaihdetaan levyasemaksi C:. Toisella rivillä vaihdetaan absoluuttista viittausta hyväksikäyttäen oletushakemistoksi C:\WINDOWS\SYSTEM\. Kolmannella rivillä tulostetaan oletushakemiston sisältö ruutu kerrallaan näytölle.
C: CD C:\WINDOWS\SYSTEM\ DIR /P
Esimerkin komentojonosta ei ole kovinkaan paljon käytännön hyötyä, mutta se toimii hyvänä esimerkkinä toistuvien rutiinitoimien tekemisestä. Esimerkin komentojonoa pitäisi kehittää siten, että käyttäjä voisi antaa hakemiston, johon siirrytään. Käyttäjän antaman tiedon välittäminen komentojonoon vaatii parametrien käyttöä, josta enemmän seuraavassa luvussa.
Normaalisti käyttäjän vaihtaessa hakemistoa CD-komennolla hän antaa hakemiston nimen parametrina. Esimerkiksi komennossa CD C:\HAKEMISTO\ on komentona CD ja komennon parametrina on HAKEMISTO-niminen hakemisto.
Komentojonoon parametrien välittämisessä on sama idea. Parametrien avulla käyttäjä voi muuttaa komentojonon käyttäytymistä. Edellisessä luvussa olleen esimerkin mukaisesti käyttäjä voisi haluta antaa hakemiston, johon hän haluaa siirtyä ja josta hän haluaa nähdä listauksen. Esimerkiksi käyttäjä kutsuisi komentojonoa seuraavasti:
VAIHDA C:\WINDOWS\
Tällöin komentojonon pitäisi siirtyä käyttäjän haluamaan hakemistoon eli E-levyasemalla sijaitsevaan OMAT-nimiseen hakemistoon ja antaa hakemistosta tiedostolistaus sivu kerrallaan. Seuraavassa esimerkissä komentojonon kutsussa tuleva parametri huomioidaan. Kohtaan, johon komentojonon kutsun ensimmäinen parametri halutaan tulee %1. Komentojonon suorituksen aikana %1 korvataan komentojonolle annetulla parametrilla eli C:\WINDOWS\ -hakemistoviittauksella.
C: CD %1 DIR /P
Komentojono ei toimi kuitenkaan vielä kunnolla, koska annettaessa hakemistopolku johonkin toiseen levyasemaan esimerkiksi E:\OMAT\ näytetään C-levyaseman oletushakemiston sisältö. CD-komento vaihtaa ainoastaan kyseisen levyaseman oletushakemiston halutuksi, joten ensin täytyy tehdä levyasemalla siirtyminen. Seuraavassa esimerkissä pyritään kiertämään kyseinen ongelma välittämällä komentojonolle toinenkin parametri, jonka avulla kerrotaan levyasema, jolle siirrytään. Nyt komennolle välitetään kaksi parametria seuraavan esimerkin mukaisesti.
%0 %1 %2 VAIHDA E:\OMAT\ E:
Komentojonoa täytyy muokata hieman seuraavan esimerkin muotoon. Kun komentojonoa kutsutaan edellisen esimerkin mukaisesti kahdella parametrilla, niin %2 paikalle laitetaan komentojonon toinen parametri eli E: ja %1 paikalle laitetaan komentojonon ensimmäinen parametri eli E:\OMAT\.
%2 CD %1 DIR /P
Komentojonolle voidaan antaa kaiken kaikkiaan yhdeksän eri parametria seuraavan esimerkin mukaisesti.
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 KOMENTO EKAPARA TOKAPARA KOLMAS NELJÄS VIIDES KUUDES SEISKA KASI YSI
Edellä toteutettu komentojono on toimiva, mutta ei vieläkään kovin käyttökelpoinen. Huomaa, että oikeassa komentojonossa ei saa koskaan vaihtaa oletushakemistoa, koska kaikki toimet toisiin hakemistoihin pitäisi tehdä oletushakemistosta käsin. Toisiin hakemistoihin viitattaessa kannattaa käyttää absoluuttista viittausta. Edellisten esimerkkien yksinkertaistamiseksi käytettiin CD-komentoa. Seuraavissa luvuissa tarkastellaan DOS-komentoja, joiden avulla saadaan komentojonoon lisää erilaisia ominaisuuksia.
Komentojonoissa voidaan käyttää mitä tahansa DOS-komentoja tai ohjelmien nimiä. Seuraavissa luvuissa tutustutaan erityisesti komentojonojen yhteydessä käytettäviin DOS-komentoihin.
ECHO-komennon avulla voidaan ohjata komentojonon tulostetta.
echo [on | off] [viesti]
Seuraavassa esimerkissä tulostetaan näkyville teksti Hello World. 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. ECHO-komennolla voidaan tulostaa käyttäjälle haluttu informaatio näkyville. Komento ECHO. tulostaa tyhjän rivin.
@ECHO OFF ECHO. ECHO Hello world! ECHO.
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.
PAUSE-komennolla voidaan keskeyttää komentojonon suoritus. PAUSE-komennolla keskeytyksessä komento tulostaa tekstin "press any key to continue. . .". Komennon tulostus voidaan kuitenkin ohjata suoraan "roskikseen", kuten seuraavassa esimerkissä on tehty. PAUSE-komento antaa käyttäjälle mahdollisuuden keskeyttää komentojonon suorittaminen CTRL-C-näppäinyhdistelmällä.
Esimerkin komentojono tulostaa käyttäjälle informaatiota ja antaa mahdollisuuden keskeyttää toimintansa ennen hakemiston luomista. 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
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 rivi kaksoispisteellä (:), jonka jälkeen välittömästi annetaan nimiön nimi.
goto nimiö
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
Tarkempi esimerkki GOTO-komennon käytöstä löytyy IF-komennon esimerkistä.
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 suoritus voidaan keskeyttää kesken suorituksen EXIT-komennolla. Jos komentojonon suoritus keskeytetään EXIT-komennolla, niin komentokehoteikkuna suljetaan esimerkiksi Windows 2000:ssa kokonaan. Tällöin käyttäjä ei saa tarvittavaa informaatiota. Edellä olleen IF-esimerkin GOTO loppu tekstien paikalla voitaisiin käyttää EXIT-komentoa.
FOR-komennon avulla voidaan käsitellä erikseen jokainen joukkona annetusta tiedostosta. Esimerkiksi jokerimerkkien avulla annettu parametri voidaan käydä läpi tiedostoittain.
for %%muuttuja in (joukko) do komento
Seuraavassa esimerkissä käydään läpi kaikki doc ja txt -tiedostot ja tulostetaan niiden sisältö näytölle.
for %f in (*.doc *.txt) do type %f
Seuraavassa esimerkissä tulostetaan näkyville kaikki 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.
for %%f in (%1) do type %%f
SHIFT-komento mahdollistaa komentojonoissa enemmän kuin yhdeksän parametrin käytön. SHIFT-komento siirtää kaikkia parametreja yhden taaksepäin eli %2 parametrista tulee %1 parametri.
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.
@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
CALL-komennolla voidaan kutsua komentojonon sisältä toista komentojonoa. Komentojonoa kutsuttaessa täytyy antaa komentojonon paikka ja nimi sekä komentojonoon liittyvät parametrit. call komentojonon_nimi parametrit
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.
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ää.
@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