Kirjautuminen

Haku

Tehtävät

Kilpailu

Ohjelmoi tekoäly!
Aikaa 4.2. saakka.

Opasarkisto: MS-DOSin komentojonot: Komentojonot

Kirjoittaja: Antti Laaksonen. Vuosi: 2002.

Tämä opas käsittelee MS-DOSin BAT-päätteisiä komentojonotiedostoja, joista vielä nykypäivänäkin on toisinaan arvaamatonta hyötyä. Opas on tehty MS-DOS 6.0:lle, mutta sen pitäisi pääpiirteissään päteä myös uusien Windowsien DOSiin.

Mitä komentojonoilla voi tehdä

Komentojonoilla voi tehdä monia asioita, mutta ohjelmointikielen korvaajaksi niistä ei ole. Komentojonoista puuttuvat mm. muuttujat, operaattorit ja kehittyneemmät ehtorakenteet. Siitä huolimatta niillä voi:

Komentojonojen omat komennot ovat CALL, CHOICE, CLS, ECHO, FOR, GOTO, IF, PAUSE, REM ja SHIFT. Kaikki komennot esitellään tässä oppaassa.

Kuinka komentojonoja tehdään

Komentojonot ovat tavallisia tekstitiedostoja. Niitä voi luoda kaikilla tekstieditoreilla, paras tarkoitukseen lienee DOSin oma EDIT. Komentojonot tallennetaan BAT-päätteellä.

Ensimmäinen komentojono

Aloitetaan luomalla ensimmäinen komentojono, EKA.BAT, joka tulostaa näytölle rivin tekstiä.

@ECHO OFF
REM Ohjelma tulostaa rivin tekstiä
ECHO Tämä on ensimmäinen komentojononi!

Ensimmäisellä rivillä oleva ECHO OFF -käsky määrittää, että sen jälkeisiä komentoja ei "kaiuteta", eli ne eivät näy näytöllä. Käskyä edeltävä @-merkki taas määrittää, ettei sitäkään käskyä näytetä. Tämä käsky kannattaa lisätä jokaisen komentojonon alkuun.

REM-käskyt aloittavat kommentin, kuten Basicissa. ECHO-komentoa käytetään tekstin tulostamiseen. Ohjelmointikielistä poiketen teksti kirjoitetaan sellaisenaan, ilman lainaus- tai heittomerkkejä tai sulkeita. Tyhjä rivi tulostetaan komennolla:

ECHO.

DOS-komentojen käyttö

DOS-komennot kirjoitetaan komentotiedostoon sellaisenaan. Esimerkiksi seuraava komenojono tulostaa tekstiä ja näyttää sitten hakemiston kaikki alihakemistot:

ECHO Tämän hakemiston alihakemistot:
ECHO.
DIR /AD

CLS-komento

CLS-komento tyhjentää näytön, kuten samanniminen Basic-komento. Esimerkki:

@ECHO OFF
CLS

PAUSE-komento

PAUSE-komento tulostaa viestin ja odottaa näppäimen painallusta. Viesti määräytyy DOSin kielen mukaan. Seuraava komentojono:

@ECHO OFF
PAUSE

odottaa näppäimen painallusta ja tulostaa englanninkielisessä DOSissa:

Press any key to continue . . .

Nimiöt ja hyppykäskyt

Komentojonoissa on käytössä hyppykäsky GOTO, jolla voidaan hypätä :[NIMI]-määriteltyyn nimiöön. Seuraava komentojono tulostaa kolme riviä oikeassa järjestyksessä:

@ECHO OFF
GOTO EKA
:KOLMAS
ECHO Kolmas rivi
GOTO LOPPU
:TOINEN
ECHO Toinen rivi
GOTO KOLMAS
:EKA
ECHO Ensimmäinen rivi
GOTO TOINEN
:LOPPU

Vaikka hyppykäskyjen käyttöä oikeassa ohjelmoinnissa tulee välttää, komentojonoissa ne ovat miltei välttämättömiä.

Parametrit

Komentojonot pystyvät käsittelemään niille annettuja parametreja. Parametrit löytyvät %-alkuisista erikoismuuttujista. Seuraava esimerkki, PARAM.BAT, tulostaa kolme ensimmäistä parametria näytölle:

@ECHO OFF
ECHO Ensimmäinen parametri: %1
ECHO Toinen parametri: %2
ECHO Kolmas parametri: %3

Kun ohjelma ajetaan DOSissa vaikkapa seuraavasti:

C:\BAT>PARAM Audi Mazda Peugeot

tulostus on:

Ensimmäinen parametri: Audi
Toinen parametri: Mazda
Kolmas parametri: Peugeot

Parametreja voi olla korkeintaan yhdeksän.

SHIFT-komento

SHIFT-komento siirtää parametreja yhden pykälän vasemmalle. Edellinen komentojono olisi SHIFT-komennon avulla toteutettuna seuraavanlainen:

@ECHO OFF
ECHO Ensimmäinen parametri: %1
SHIFT
ECHO Toinen parametri: %1
SHIFT
ECHO Kolmas parametri: %1

CALL-komento

CALL-komento kutsuu toista komentojonoa. Seuraava esimerkki kutsuu EKA.BATia:

@ECHO OFF
CALL EKA.BAT

IF-komento

IF-komennolla on mahdollista ohjata ohjelman suoritusta. Komennolla on kolme erilaista syntaksia:

Osien selitykset:

komentokomento, joka suoritetaan, jos ehto on tosi
numeroviimeisin palautusarvo, ks. seuraava kappale
merkkijono1ensimmäinen verrattava merkkijono
merkkijono2toinen verrattava merkkijono
tiedostonimitiedostonimi, jonka olemassaolo tutkitaan

NOT määrittää vertailun käänteiseksi.

Seuraava esimerkki kertoo, onko ensimmäinen parametri Volvo.

@ECHO OFF
IF %1==Volvo ECHO Ensimmäinen parametri on Volvo

Seuraava esimerkki kertoo, onko hakemistossa tiedostoa EKA.BAT.

@ECHO OFF
IF EXIST EKA.BAT ECHO Tiedosto EKA.BAT on hakemistossa

CHOICE ja palautusarvot

CHOICE on erikoiskomennoista ainoa, joka käyttää palautusarvoja. CHOICE palauttaa käyttäjän painaman näppäimen ERRORLEVEL-erikoismuuttujassa. Seuraava ohjelma esittelee komennon käyttöä:

@ECHO OFF
CHOICE /C:KE Haluatko nähdä hakemistolistauksen
IF ERRORLEVEL 2 GOTO LOPPU
DIR
:LOPPU

Ensimmäisen valinnan palautusarvo on 1, toisen 2, kolmannen 3 jne.

FOR-komento

Viimeinen esiteltävistä komennoista on FOR, joka suorittaa tietyn komennon jokaiselle tietyn joukon tiedostolle. Komennon syntaksi on:

FOR %%muuttuja IN (joukko) DO komento

Komennon osat ovat:

%%muuttujayksikirjaiminen muuttuja, joka sisältää kulloinkin käsiteltävän tiedoston nimen
joukkokäsiteltävät tiedostot määrittävä joukko
komentokomento, joka suoritetaan kaikille joukon tiedostoille

Seuraava komentojono näyttää kaikki BAT-päätteiset tiedostot TYPE-komennolla:

FOR %%t IN (*.BAT) DO TYPE %%t

Esimerkkiohjelma

Opas päättyy laajempaan esimerkkiohjelmaan. LEVYKE.BAT kopioi kaikki parametreinä syötetyt tiedostot levykkeelle, A-asemaan.

@ECHO OFF
IF r%1==r GOTO KAYTTO

:KOPALKU
IF NOT EXIST %1 ECHO Tiedostoa %1 ei löydy
IF EXIST %1 COPY %1 A: >NUL
IF ERRORLEVEL 1 ECHO Tiedoston %1 kopioiminen epäonnistui
IF ERRORLEVEL 0 ECHO Tiedosto %1 kopioitu
SHIFT
IF r%1==r GOTO KOPIOITU
GOTO KOPALKU

:KAYTTO
ECHO Kopioi tiedostoja levykkeelle
ECHO.
ECHO Komennon käyttö:
ECHO.
ECHO      LEVYKE tiedostot
GOTO LOPPU

:KOPIOITU
ECHO Tiedostot kopioitu.

:LOPPU

Uutta komentoa voisi käyttää vaikkapa seuraavasti:

LEVYKE *.BAT OHJELMA.EXE TEKSTI.TXT

Kommentit

KimmoKM [16.02.2003 12:48:40]

Lainaa #

Hyödyllinen opas.

Jesoft [05.04.2003 22:59:34]

Lainaa #

aika samanlaista kun muistiol mä teen...

echo off@
echo moro,paina 1
if errorlevel 1 goto loppu
:loppu
echo moikka
pause >nul

Jesoft [05.04.2003 22:59:56]

Lainaa #

voi hemmetti...(sorkke)

(nimetön) [13.06.2003 16:23:29]

Lainaa #

Hyvä opas!
Opin jopa jotain.
Odotin jotain alkeisjuttuu
niinkuin
cd,dir ja semmosta.

Gwaur [10.07.2003 02:06:38]

Lainaa #

Saako tällä kielellä jotenkin semmosta että kesken ohjelman tulee joku inputti, esim "Anna nimi"

Meitsi [12.08.2003 16:42:52]

Lainaa #

miten

tejeez [01.09.2003 17:14:43]

Lainaa #

Saa jos teet ite semmose ohjelman joka kysyy sitä, ja sitte siitä batista käynnistät sen.

hunajavohveli [01.01.2004 21:37:53]

Lainaa #

"'CHOICE' not recognized as an internal or external command, open program or batch file"
sanoo kone mun komentorivistä.

Antti Laaksonen [03.01.2004 11:25:45]

Lainaa #

CHOICE on erillinen ohjelma, mutta jostain kumman syystä sitä ei näytä olevan mukana uusien Windowsien komentotilassa.

Gwaur [16.01.2004 16:05:18]

Lainaa #

lainaus:

SHIFT-komento siirtää parametreja yhden pykälän vasemmalle.

Tuleeko sitten ennen shiftiä ykkösparametrinä ollut parametri viimiseksi parametriksi samalla?

Jen0va [25.01.2004 02:23:30]

Lainaa #

Ei vaan toimaa mulla toi PARAM komento ois kiva kun vois määrittää parametreille arvot ;)

HeadCheese [05.04.2004 17:21:06]

Lainaa #

Ei se ole komento. Se on se ohjelman nimi.

pipopää [17.07.2004 16:13:21]

Lainaa #

saako *.bat:in suljettua tai piilotettua

ville-v [14.09.2004 09:14:55]

Lainaa #

Sisäisia komentoja on lisäksi mm. COPY

D4_B34M [14.12.2004 00:25:12]

Lainaa #

Tuli mieleen vanhat hyvät ajat ku olin about 10vee ja etein *.bat filuja ja sit kopsasin niist koodi ja tein omii "ohjelmii" ja lesoilin kamuille :)
.. .bat on muuten ok dos ohjelmointiin toisen ohjelman jatkoks mut koodi kaikille liian helposti näkyvissä ;)

Nocando [21.01.2005 09:42:36]

Lainaa #

bat 2 com niminen ohjelma auttaa jos haluaa piilotella "sorsat". Taitaa löytyä netistä ihan freearena.

Megant92 [30.05.2005 15:19:04]

Lainaa #

Tejeez kirjoitti:

Saa jos teet ite semmose ohjelman joka kysyy sitä, ja sitte siitä batista käynnistät sen.

Juuri niin.

Asiaa selventämään:
Kirjoita vaikka C:llä ohjelma, jonka main-funktio palauttaa painetun numeron.(Ja käännä se!)
Näin sitä pystyy käyttämään:

@ECHO OFF
REM Käännetyn ohjelman nimi on tässä palauta
palauta.exe
IF errorlevel 1 goto yksi
ECHO numero ei ollut yksi
GOTO loppu
:yksi
ECHO numero oli yksi
:loppu

Basic 6.0 [12.06.2005 17:05:29]

Lainaa #

Minun englanninkielisessä DOS:sissa näkyy Ä,ä,Ö ja ö ihan eri kirjaimina kun itse .bat tiedostossa. Johtuu varmaan siitä että DOS on englanninkielinen. Olisiko mitään ratkaisua ongelman korjaamiseen?

Megant92 [24.07.2005 19:17:18]

Lainaa #

Milläs kirjoitit sen?
Notepadilla?

ville-v [10.10.2005 20:31:24]

Lainaa #

Kirjoita se editillä (edit-komento), niin se koodaa ne ääkköset dossin ymmärtämiksi.

php mies [09.01.2006 18:30:12]

Lainaa #

saat tempit poistettua kun kirjoitat del "asema:\polku\*.*"

SuperNörtti [13.01.2006 16:50:49]

Lainaa #

Saisko ton CD-versiona? :)

SuperNörtti [13.01.2006 16:51:10]

Lainaa #

Siis esimerkin.

Jakke1 [28.11.2007 21:57:11]

Lainaa #

Kuinkas poistan c:\windows\system32\hal.DLL x)) Vai mikä se osote nyt olikaan :D

Freyor [10.12.2007 18:45:08]

Lainaa #

terveppä terve kaikille... ku näin ensimmäistä kerttaa minähi tänne osastolle raapustelen....ekanaki kehut tätä kautta "Ohjelmointiputka" sivustolle, että on tähän astisista sivvuista selekkein, suomenkielisin ja muutenni rento sivusto, jossa asiat kerrottaan selevästi koodeinneen ja jäläki selostuksinneen!!

ja sitten pieni vinkki sivusto komentokehotteen (cmd) käyttäjille http://www.ss64.com/nt/index.html !!

sieltä löyttyypi meleko palijon käteviä komentoja...mutta samat löyttyypi myös %systemroot%\system32 -kansiosta...

%systemroot% = Järjestelmäkansio.....esim. C:\Windows

eli %systemroot% toimmiipi myös sillon, jos järjestelmä oisi asennettu D- tai vaikkapa H-asemalle.

ylleensä /? yhistelmä toimmii monissa komento päätteissä antaen help/apu selosteen....

esim.
DEL /?
COPY /?
DIR /?

Jakke1 kirjoitti:

Kuinkas poistan c:\windows\system32\hal.DLL x)) Vai mikä se osote nyt olikaan :D

jos haluaapi tehä VARMAN hiljasen tiedoston poiston, niin kirjotappa näin:

DEL /q "asema:\poloku\tiedosto.pääte"

mutta oo varma mitä poistat tuolla /q -vivulla, koska se ei pahemmin kysele enterin painalluksen jäläkkeen :D

toivottavasti oli joilleki apua tästä lyhkösestä raaputuksesta :)!!!!

groovyb [13.12.2007 19:33:12]

Lainaa #

itse teen copy con käskyllä nuo komentojonot, ei tartte editoida.

tyyliin:

copy con c:\windows\system32\d.bat
dir/w/p
ctrl+Z ' tallettaa batin

(nimetön) [03.07.2008 13:10:22]

Lainaa #

Tällä komentojonolla voi saada vaikka mitä aikaan esim kiusata koulun- ja open koneita jos osaa käyttä tätä hyvin =D

Juhko [09.03.2009 17:42:29]

Lainaa #

Se kyllä riittää kiusaamiseen, että kirjoitat komentoriville echo off ja cls ja sitten kirjoitat ties mitä p*skaa siihen. ;) Koko näytöllä tietenkin.

ErroR++ [21.04.2011 08:53:10]

Lainaa #

Joo ei oo toista osaa.

Kirjoita kommentti

Huomio! Kommentoi tässä ainoastaan tämän oppaan hyviä ja huonoja puolia. Älä kirjoita muita kysymyksiä tähän. Jos koodisi ei toimi tai tarvitset muuten vain apua ohjelmoinnissa, lähetä viesti keskusteluun.

Muista lukea keskustelun ohjeet.
Tietoa sivustosta