.BAT

.BAT on tiedostopääte MS-DOS:in komentojonoille, ja tätä komentokieltä kutsutaan nimellä Batch. Nämä komentojonot voivat sisältää MS-DOS:in komentotulkin (Command.com), käskyjä, joista osa on ainoastaan komentojonotiedostoja varten. Command.com on korvattu Windowsissa cmd.exe:llä sekä PowerShellillä. Windowsin cmd.exe tukee Batch-komentosarjoja. Batch- komentojonot toimivat myös macOS:ssa ja Linuxissa DOSBoxin kautta. Komentojonotiedostoilla voi suorittaa peruslaskutoimituksia, mutta se ei tue liukulukuja. Myös esimerkiksi ohjelmia voi avata komentojonotiedostojen kautta. Esimerkiksi `calc` avaa Windowsin mukana tulevan laskimen. Jotta komentotulkki löytää halutun ohjelman, täytyy sen polun sisältyä PATH- ympäristömuuttujaan tai sitten käyttäjän täytyy vaihtaa nykyinen työhakemisto hakemistoon, jossa haluttu ohjelma sijaitsee. ==Rakenne== .BAT-tiedostojen rakenne on hyvin yksinkertainen. Komennot kirjoitetaan rivi kerrallaan, erotettuna rivivaihtomerkillä 0x13 tai 0x13+0x10. ===Esimerkkiohjelma=== echo Ensimmäinen rivi echo Toinen rivi echo Kolmas rivi Yllä oleva ohjelma antaa näytöllä seuraavanlaisen tuloksen: C:\>echo Ensimmäinen rivi Ensimmäinen rivi C:\>echo Toinen rivi Toinen rivi C:\>echo Kolmas rivi Kolmas rivi Echo-käskyä käytetään tekstirivien tulostamiseen. Tyhjä rivi tulostetaan lisäämällä komennon loppuun piste (echo.). Komentokaiutuksen tilan saa selville kirjoittamalla `echo` ilman parametrejä. Tulosteena on suomenkielisessä MS-DOS:issa `ECHO on ON` tai `ECHO on OFF`. ==Komentokaiutus== Kuten edellisessä kappaleessa olevasta esimerkkiohjelmasta huomaa, komentokaiutus on oletuksellisesti päällä, eli jokainen komento näytetään ennen sen suorittamista. Jos komennon eteen kirjoitetaan @-merkki, sitä ei kaiuteta: @echo Ensimmäinen rivi @echo Toinen rivi @echo Kolmas rivi Ohjelman antama tulos: Ensimmäinen rivi Toinen rivi Kolmas rivi Komentokaiutuksen voi asettaa pois päältä komennolla echo off. @echo off echo Ensimmäinen rivi echo Toinen rivi echo Kolmas rivi ==Ehtorakenteet== Komentojonoissa ei ole varsinaisia ehtorakenteita, sillä ehtorakenteessa voi olla vain yksi käsky kerrallaan. Tämä käsky on if, ja sille on kolme erilaista käyttötarkoitusta: *Merkkijonojen vertailu: `if [not] merkkijono1==merkkijono käsky` *Palautusarvon (errorlevel) tarkastus: `if [not] errorlevel arvo komento` *Tiedoston olemassaolon tarkastus: `if [not] exist tiedosto komento` Merkkijonojen vertailussa on huomattava, että kumpikaan merkkijono ei saa olla tyhjä. Errorlevel tarkoittaa edellisen ohjelman palauttamaa virhekoodia. Not muuttaa vertailun käänteiseksi. ==Hyppykäskyt== Komentojonoissa käytettävä hyppykäsky on goto. Sen syntaksi on `goto nimi`. Nimiöt määritellään koodilla `:nimi`. Esimerkki: @echo off :alku echo Hello World! goto alku Ohjelma toistaa lausetta "Hello World!" loputtomiin. Ohjelmasta voi poistua kesken näppäinyhdistelmällä Ctrl+C. ===Vinkki=== Monen käskyn ehtorakenteita voi luoda hyppykäskyjen avulla: @echo off echo Onko tiedosto.txt olemassa? echo. if not exist tiedosto.txt goto muuten echo -On olemassa! echo -On tosiaankin. echo -Niin muuten on. goto loppu :muuten echo -Ei ole olemassa! echo -Ei niin. echo -Ei tosiaankaan. :loppu echo. echo Ohjelma loppuu. pause ==Parametrit== Komentojonoja kutsuttaessa niille voidaan välittää parametrejä. Niihin viitataan ohjelmassa kirjainyhdistelmällä `%parametrinnumero`, eli ensimmäinen parametri on %1, toinen %2 jne. Parametrejä voi olla korkeintaan yhdeksän, ja esimerkiksi yhdistelmä `%10` tarkoittaa ensimmäistä parametriä, jonka jälkeen tulee nolla. ===Esimerkki=== @echo off echo Ensimmäinen parametri on %1. echo Toinen parametri on %2. echo Kolmas parametri on %3. On olemassa myös nk. nollaparametri, eli `%0`, josta näkyy komentojonon nimen kirjoitusasu, kun sitä kutsuttiin. ==Kysymykset== Choice -käskyä käytetään kysymyksen esittämiseen käyttäjälle. Vastaus palautetaan errorlevel -muuttujaan. Komennon syntaksi on seuraava: choice /c:vastaukset kysymys eli esimerkiksi: choice /C:ABC Valitse A, B tai C: Käyttäjä valitsee vastauksen painamalla sille määrättyä kirjainta. Errorlevel määräytyy siten, että ensimmäinen vaihtoehto on 1, toinen 2 jne. Choice-käskylle on muitakin parametrejä, ja ne saa selville kirjoittamalla komentoriviin `choice /?`. Windows Vistan choicen syntaksi poikkeaa hieman vanhasta syntaksista: choice /C:ABC /M Valitse A, B tai C: ==Muuttujat== Komentojonot osaavat käsitellä DOS:in ja Windowsin ympäristömuuttujia, joihin viitataan kirjoittamalla `%muuttuja%`. Muuttujat voidaan asettaa komennolla set seuraavasti: set muuttuja=arvo ==Tiedostoihin kirjoitus== Tiedostoja voidaan uudelleenkirjoittaa ohjaamalla käskyjen syötteet niihin. Esimerkki: echo Heippa! >tiedosto.txt Kirjoittaa "Heippa!" tiedostoon tiedosto.txt. Myös kommentojen tulosten ja virheet voidaan suunnata tiedostoihin for /f %%i in ('dir /s /b /a-d') echo tiedosto --- %%i >>ajo.log 2>>virhelogi.log ==Muuta== ===Näytön tyhjennys=== Cls-käsky tyhjentää tiedoston tekstin, mikäli se on mahdollista. ===Näppäimen odotus=== Pause- käsky odottaa, kunnes painetaan jotakin näppäintä, ja tulostaa tekstin "Jatka painamalla mitä tahansa näppäintä. . .". ===>NUL=== Jos käskyn loppuun lisää `>NUL`, sen tulosteet eivät näy. Tästä on hyötyä erityisesti pause-käskyn kanssa ja joskus myös choicen. Vinkki: Jos tekee ohjelman .bat-muotoon, ja siinä tarvitaan Pause-käskyä, tämä kannattaa tehdä Pause-käskyn loppuun. ===For=== For-käsky käy läpi tiedostoja ja suorittaa niille halutun komennon. Sen syntaksi on seuraava: `for %%muuttuja in (tiedostojoukko) do käsky`. Seuraava käsky tulostaa kaikkien nykyisen hakemiston tiedostojen nimet: for %%k in (*.*) do echo %%k Uusien Windowsien komentoriveissä for-käskylle on muitakin käyttötarkoituksia. Ne saa selville kirjoittamalla komentoriviin `for /?`. ===Shift=== Shift-käsky siirtää parametrejä yhden pykälän vasemmalle. Eli parametri, jonka numero oli ennen käskyä 2, onkin nyt parametri numero 1. === Yhteenlasku === @echo off set /a a = 2 set /a b = 10 set /a c = %a%+%b% echo %c% ==Kommentit== Koodia voi kommentoida rem-"käskyllä" seuraavasti: rem Kommentti ==Lähteet== *Ohjelmointiputka: MS-DOSin komentojonot Luokka:Ohjelmointi