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. 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. A
pause
Í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 off 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 @Echo off SET ALMA=Alma Echo %ALMA%
Az elágazások szintakszisa 4 féle lehet: IF IF IF IF
[NOT] [NOT] [NOT] [NOT]
EXIST filenév parancs [parancsparaméterek] EXIST könyvtárnév\nul parancs [parancsparaméterek] ERRORLEVEL n parancs [parancsparaméterek] 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 @Echo off 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 ]
/C:lehetőségek
/N /S /T:c,nn Szöveg
[ /N ]
[ /S ]
[ /T[:]c,nn ] szöveg
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 Nem jeleníti meg a ? jelet a szöveg végén A választható billentyűknél megkülönbözteti a kis és nagybetűket. nn másodperc eltelte után automatikusan kiválasztja a c lehetőséget. 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 @Echo off 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