Kirjoittaja: Antti Laaksonen (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.
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.
Komentojonot ovat tavallisia tekstitiedostoja. Niitä voi luoda kaikilla tekstieditoreilla, paras tarkoitukseen lienee DOSin oma EDIT. Komentojonot tallennetaan BAT-päätteellä.
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-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 tyhjentää näytön, kuten samanniminen Basic-komento. Esimerkki:
@ECHO OFF CLS
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 . . .
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ä.
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 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 kutsuu toista komentojonoa. Seuraava esimerkki kutsuu EKA.BATia:
@ECHO OFF CALL EKA.BAT
IF-komennolla on mahdollista ohjata ohjelman suoritusta. Komennolla on kolme erilaista syntaksia:
Osien selitykset:
komento | komento, joka suoritetaan, jos ehto on tosi |
numero | viimeisin palautusarvo, ks. seuraava kappale |
merkkijono1 | ensimmäinen verrattava merkkijono |
merkkijono2 | toinen verrattava merkkijono |
tiedostonimi | tiedostonimi, 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 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.
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:
%%muuttuja | yksikirjaiminen muuttuja, joka sisältää kulloinkin käsiteltävän tiedoston nimen |
joukko | käsiteltävät tiedostot määrittävä joukko |
komento | komento, joka suoritetaan kaikille joukon tiedostoille |
Seuraava komentojono näyttää kaikki BAT-päätteiset tiedostot TYPE-komennolla:
FOR %%t IN (*.BAT) DO TYPE %%t
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
Hyödyllinen opas.
aika samanlaista kun muistiol mä teen...
echo off@ echo moro,paina 1 if errorlevel 1 goto loppu :loppu echo moikka pause >nul
voi hemmetti...(sorkke)
Hyvä opas!
Opin jopa jotain.
Odotin jotain alkeisjuttuu
niinkuin
cd,dir ja semmosta.
Saako tällä kielellä jotenkin semmosta että kesken ohjelman tulee joku inputti, esim "Anna nimi"
miten
Saa jos teet ite semmose ohjelman joka kysyy sitä, ja sitte siitä batista käynnistät sen.
"'CHOICE' not recognized as an internal or external command, open program or batch file"
sanoo kone mun komentorivistä.
CHOICE on erillinen ohjelma, mutta jostain kumman syystä sitä ei näytä olevan mukana uusien Windowsien komentotilassa.
lainaus:
SHIFT-komento siirtää parametreja yhden pykälän vasemmalle.
Tuleeko sitten ennen shiftiä ykkösparametrinä ollut parametri viimiseksi parametriksi samalla?
Ei vaan toimaa mulla toi PARAM komento ois kiva kun vois määrittää parametreille arvot ;)
Ei se ole komento. Se on se ohjelman nimi.
saako *.bat:in suljettua tai piilotettua
Sisäisia komentoja on lisäksi mm. COPY
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ä ;)
bat 2 com niminen ohjelma auttaa jos haluaa piilotella "sorsat". Taitaa löytyä netistä ihan freearena.
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
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?
Milläs kirjoitit sen?
Notepadilla?
Kirjoita se editillä (edit-komento), niin se koodaa ne ääkköset dossin ymmärtämiksi.
saat tempit poistettua kun kirjoitat del "asema:\polku\*.*"
Saisko ton CD-versiona? :)
Siis esimerkin.
Kuinkas poistan c:\windows\system32\hal.DLL x)) Vai mikä se osote nyt olikaan :D
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 :)!!!!
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
Tällä komentojonolla voi saada vaikka mitä aikaan esim kiusata koulun- ja open koneita jos osaa käyttä tätä hyvin =D
Se kyllä riittää kiusaamiseen, että kirjoitat komentoriville echo off
ja cls
ja sitten kirjoitat ties mitä p*skaa siihen. ;) Koko näytöllä tietenkin.
Joo ei oo toista osaa.
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.