BATCH Programozás Tartalomjegyzék 1. Bevezetés 2. Általános információk a batch file-okról 3. A legegyszerűbb batch file-ok 4. Paraméterezhető batch file-ok 5. Gyakran használatos batch parancsok 6. Elágazások 7. Feltételes-, és feltétel nélküli ugrások 8. Ciklusok 1. Bevezetés A mindennapi számítógép-használat során előfordulhat, hogy gyakorta kell ugyanazt a bonyolult parancsot, parancssorozatot kiadnunk. Az operációs rendszerekkel szemben támasztott alapvető követelmény, hogy ezek egyszerűsítésére megfelelő eszközt nyújtson a felhasználók számára. A legkézenfekvőbb megoldás egy csökkentett utasításkészletű, egyszerű programozási nyelv bevezetése. Az MsDos-ban ezt a nyelvet BATCH-nek nevezik, az angol batch (köteg) szó után, mivel a batch file-ok MsDos parancsok kötegeiként foghatók fel: a batch programozás lényege, hogy a használni kívánt MsDos parancsokat egymás után felsoroljuk egy file-ban. 2. Általános információk a batch file-okról Mint tudjuk, az MsDos operációs rendszer a kiterjesztés alapján dönti el, hogy az adott file futtatható-e. A futtatható állományok három fajták lehetnek: COM, EXE és BAT kiterjesztésűek. Az első kettő ezek közül bináris, a különbség méretükben és felépítésükben van (erről most bővebben nem szólunk). A BAT kiterjesztésű file-ok szöveges file-ok, szerkesztésük bármely szövegszerkesztő programmal történhet, mely képes ASCII formátumba menteni.
A futtatható állományok végrehajtási sorrendje: COM, EXE, BAT, tehát amennyiben ugyanazon könyvtárban (illetve a PATH könyvtárainak bármelyikében) található ugyanolyan néven a fenti kiterjesztésűek közül több is, s a programot a nevével akarjuk indítani, úgy a COM kiterjesztésű fog elindulni, amennyiben létezik. Ha nem, akkor természetesen az EXE, ha pedig az sem létezik, akkor a BAT. 3. A legegyszerűbb batch file-ok A legegyszerűbb eset a batch file-ok használatának szükségességére az, ha egy gyakran használt programot hosszú de konstans paraméterlistával kell indítanunk. Legyen például egy lovoldoz.exe nevű játékunk a C:\Games\Lovoldoz könyvtárban, melyet a következőképp szoktunk indítani: C:\Games\Lovoldoz\Lovoldoz fegyver nagy loszer sok ellenseg gyenge Bár a fenti sor begépelése viszonylag egyszerű feladat, miért ne csinálnánk még egyszerűbben? Mint már említettük, a batch file-ok MsDos parancsok felsorolásából állnak. Szintén tudjuk már azt is, hogy BAT kiterjesztéssel kell ellátnunk őket ahhoz, hogy az operációs rendszer felismerje őket. Ezen információk alapján tehát elkészíthetjük első BATCH programunkat, a következőképp: 1. Hozzunk létre egy l.bat nevű file-t a winchesterünk gyökérkönyvtárában, bármely szövegszerkesztő programmal (pl.:edit.com). 2. Írjuk bele a fenti parancsot. 3. Mentsük el a file-t. Ezek után bármikor kiadjuk az l parancsot, máris végrehajtódik a fenti parancs, s elindul a hőn áhított játék. (Itt szeretnék emlékeztetni a fent említett végrehajtási sorrendre: amennyiben létezik l.com vagy l.exe nevű file az aktuális könyvtárban, úgy az, s nem a BATCH program fog elindulni a parancs hatására.) 4. Paraméterezhető batch file-ok Szükség lehet BATCH programjaink számára különböző paramétereket átadni. Példának okáért írjunk BATCH programot, mely ARJ file-ok kitömörítését végzi! Legyen a file neve unarj.bat. Feltehetjük, hogy a kitömörítés során az arj programot mindig ugyanazokkal a paraméterekkel hívjuk, csupán a kitömörítendő file neve változik. BATCH programon belül %n jelöli a paramétereket, ahol n értéke 1 és 9 között változhat. 1
Készítsünk tehát egy unarj.bat nevű BATCH programot, melynek egyetlen paramétere a kitömörítendő file neve! Unarj.bat C:\Utils\Arj.exe x %1 r v y Előfordulhat, hogy 9 paraméternél többre van szükségünk. Ekkor a shift BATCH parancsot hívjuk segítségül: hatására a paramétereket balra tolja eggyel. Így az első paraméter elveszik, s %1 fogja jelölni a másodikat, %9 a tizediket. Az elveszett paraméterek visszaszerzésére nincs mód. 5. Gyakran használatos batch parancsok Általában egy programot akkor tekintünk felhasználó-barátnak, ha tájékoztatja a felhasználót arról, hogy mit csinál. Ehhez mindenképpen szükség van valami utasításra, amivel a képernyőre különböző üzeneteket írhatunk. Ezt végzi el az echo parancs, melynek szintaktikája: echo szöveg. Mint azt már bizonyára észrevettük, a batch file-ban található utasítások sorra megjelennek a képernyőn, amikor végrehajtásra kerülnek. Ezt a parancs neve elé írt @ jellel kerülhetjük el. Az ECHO OFF parancs kiadása egyenértékű azzal, ha minden parancs elé odaírjuk a @ jelet. Amennyiben a parancsok által a képernyőre írt üzeneteket is szeretnénk elkerülni, célszerű a parancs output-ját átirányítani nul-ra. A pause parancs hatására a képernyőn megjelenik a Press any key to continue szöveg, s a program futása megáll, mindaddig, míg a felhasználó meg nem nyom egy billentyűt. Írjunk BATCH programot, ami kiírja, hogy Nyomj meg egy billentyűt!, majd billentyűnyomásra vár, s ezután kilép! A parancsok, s outputjaik NE jelenjenek meg a képernyőn! Nyomj.bat Echo Nyomj meg egy billentyűt! Pause >nul A call parancs segítségével tudunk BATCH programunkból más BATCH programot elindítani. Amennyiben a meghívandó programot a call utasítás használata nélkül hívjuk meg, úgy programunk a meghívott file lefutása után leáll, s nem folytatja futását. A call parancs szintakszisa: call filenév.bat. 2
A parancsunkban található, REM-mel kezdődő sorok nem kerülnek végrehajtásra; ezen sorokat megjegyzés soroknak tekintjük. 6. Elágazások Mielőtt az elágazások használatára kitérnénk, meg kell említenünk a változók használatának módját. A BATCH programok az MsDos környezeti változóit használják, %változónév% jelöléssel hivatkoznak rájuk. Egy változónak értéket a SET paranccsal tudunk. Egy példa változók használatára: Valt.bat SET ALMA=Alma Echo %ALMA% Az elágazások szintakszisa 4 féle lehet: IF [NOT] EXIST filenév parancs [parancsparaméterek] IF [NOT] EXIST könyvtárnév\nul parancs [parancsparaméterek] IF [NOT] ERRORLEVEL n parancs [parancsparaméterek] IF [NOT] string1==string2 parancs [parancsparaméterek] Mind a négy verziónál csak egy, a feltétel teljesülésekor végrehajtandó parancs adható meg, így ez leggyakrabban a következő fejezetben tárgyalandó GOTO parancs lesz. Az első két változattal egy file/könyvtár létét illetve nemlétét tudjuk ellenőrizni. A harmadik verzióval egy általunk meghívott program visszatérési értéke szerint tudunk elágazni (a feltétel igaz lesz, ha a visszatérési érték a megadottnál nem kisebb illetve NOT esetén nem nagyobb), míg az utolsóval két string értékének egyezősége illetve különbözősége lehet a feltétel. A string lehet egy általunk begépelt szöveg, egy paraméter, vagy pedig egy változó értéke. A paraméter illetve változó nevét idézőjelek között kell megadni. Írjunk BATCH programot, ami amennyiben létezik letörli a gyökérkönyvtárból a virus.exe nevű file-t! Vir.bat IF EXIST \virus.exe Del \virus.exe 3
Többirányú elágazások megvalósítására a BATCH a CHOICE parancsot adja lehetőségként. Segítségével kérdéseket tehetünk fel a felhasználóknak, és megadhatjuk a választható lehetőségek listáját is. A parancs szintakszisa a következő: CHOICE [ /C[:]lehetőségek ] [ /N ] [ /S ] [ /T[:]c,nn ] szöveg /C:lehetőségek A használható billentyűket lehet itt felsorolni, amennyiben ez a paraméter nincs megadva, a default értékek magyar DOS esetében I és N, angol esetében pedig Y és N /N Nem jeleníti meg a? jelet a szöveg végén /S A választható billentyűknél megkülönbözteti a kis és nagybetűket. /T:c,nn nn másodperc eltelte után automatikusan kiválasztja a c lehetőséget. Szöveg A megjelenítendő kérdés. A CHOICE visszatérési értéke a választott lehetőség sorszáma lesz. Írjunk BATCH programot, ami megkérdezi a felhasználótól a nemét, s nemének megfelelően köszönti! Hello.bat Choice /C:FL Fiú vagy vagy lány If errorlevel 2 goto lany Echo Szervusz, fiacskám Goto end :lany echo Szervusz, kislány ;) :end 4
7. Feltételes-, és feltétel nélküli ugrások Nagyobb feladatoknál előfordulhat, hogy szükségünk van a program egy pontján a futást megszakítani, s egy másik ponton folytatni; azaz a program egyik pontjáról a másikra ugrani. Ahhoz, hogy egy-egy ugrást végre tudjunk hajtani, ún. cimkéket kell definiálnunk: az ugrásnál ezekre hivatkozva adjuk meg a célt. Cimke definiálása BATCH-ben a : jellel történik, szintakszisa: :cimkenév. A goto parancs segítségével tudunk egy adott cimkére ugrani; amennyiben feltételes ugrásra van szükségünk, értelemszerűen az if szerkezetet kell a goto utasítással kombinálni. Írjunk BATCH programot, aminek paramétere egy csokoládé márka, s amennyiben ennek a paraméternek Boci az értéke, a program kiírja, hogy Hmmmm Azt én is szeretem!, ellenkező esetben viszont kiírja, hogy Egyél inkább Bocit! Csoki.bat @echo off if %1 == Boci goto boci echo Egyél inkább Bocit! Goto end :boci echo Hmmmm Azt én is szeretem! :end 5
8. Ciklusok A BATCH nyelv csak számláló ciklusok megvalósítására ad implicit lehetőséget, az általános elöl-, illetve hátultesztelő ciklusokat az IF szerkezet és a GOTO utasítás alkalmazásával kell megvalósítanunk. A számláló ciklus szintakszisa: FOR %%c in (halmaz) do parancs [parancsparaméterek] A halmaz tetszőleges értékek vesszővel elválasztott felsorolása, illetve file-lista is lehet, például: (*.txt), (*.com, *.exe), (a?lma.txt). Írjunk BATCH programot, amely az aktuális könyvtárban található összes PASCAL file-t lefordítja a tpc.exe program segítségével! Fordit.bat @echo off For %%a in (*.pas) do tpc %a 6