You are on page 1of 13

Pliki wsadowe systemu MS-DOS 1. Budowa pliku wsadowego 2. Polecenie ECHO 3. Instrukcja warunkowa (1) 4.

Etykiety i instrukcja skoku GOTO 5. Argumenty plikw wsadowych 6. Instrukcja warunkowa (2) 7. Instrukcja CALL 8. Instrukcja warunkowa (3) 9. Instrukcja iteracyjna FOR Budowa pliku wsadowego Plik wsadowy (ang. batch file) umoliwia wykonanie dowolnego cigu polece systemu MS-DOS. Z punktu widzenia systemu operacyjnego plikiem wsadowym jest kady plik, ktrego nazwa posiada rozszerzenie bat. Po wydaniu dowolnego polecenia interpreter command.com sprawdza w pierwszej kolejnoci czy wydana komenda jest poleceniem wewntrznym (interpretowanym przez command.com) i w przypadku odpowiedzi pozytywnej wykonuje wydan komend. Jeeli jednak interpreter nie rozpoznaje polecenia to przyjmuje, e uytkownik zarzda uruchomienia programu. Dla przykadu przyjmijmy, e wpisano komend
sleep 10

Command.com poszukuje wwczas pliku o nazwie o nazwie sleep.com, nastpnie pliku sleep.exe i ostecznie pliku sleep.bat. Po znalezieniu jednego z dwch pierwszych zbiorw command.com uruchamia znaleziony program, w przypadku znalezienia zbioru bat wykonuje jego interpretacj. Plik wsadowy, aby mg by poprawnie wykonany (zinterpretowany) powinien zawiera cig polece systemu, z ktrych kade powinno by umieszczone w osobnej linii pliku. Mog to by polecenia wewnetrzne, polecenia zewntrzne (programy) lub polecenia specyficzne dla pliku wsadowego (polecenia, ktre s dozwolone tylko w tym pliku). Oto prosty przykad pliku wsadowego:
REM Plik Info.bat ECHO Konfiguracja systemu MS-DOS ECHO [autoexec.bat] TYPE C:\autoexec.bat | MORE ECHO [config.sys] TYPE C:\config.sys | MORE ECHO [Dysk twardy C:] LABEL ECHO Nacinij jaki klawisz... PAUSE

Aby wykona powyszy plik naley nada mu nazw z rozszerzeniem bat (moe by Info.bat) a nastpnie w katalogu biecym wpisa komend bdc nazw pliku wsadowego, czyli odpowiednio:
C:\TEMP>info

Interpreter wykonuje sekwencyjnie jedno po drugim wszystkie polecenia pliku wsadowego w

kolejnoci ich wystpowania. Pierwsza linia pliku (polecenie REM) jest komentarzem jest komentarzem i podczas wykonywania nie jest brana pod uwag. Dwie kolejne linie zawieraj polecenie ECHO, ktrego wykonanie polega na wypisaniu podanego tekstu na ekranie. Linie 4 i 6 zawieraj polecenie MS-DOS wypisania na ekranie podanych plikw (TYPE) z podziaem na strony (MORE). Linia ostatnia zawiera polecenie PAUSE, ktrego wykonanie polega na wypisaniu tekstu "Nacinij jaki klawisz, aby kontynuowa..." i zatrzymaniu wykonywania pliku wsadowego do czasu nacinicia dowolnego klawisza. Polecenie ECHO Jeeli wykonamy plik wsadowy test.bat zawierajcy tylko jedn lini z komend DIR, to na ekranie zostan wypisane dwie rzeczy:
C:\BATCH>test C:\BATCH>dir Wolumin w stacji dyskw C nie ma etykiety Numer seryjny woluminu: 364F-10E8 Katalog C:\BATCH . .. TEST <DIR> <DIR> 20:42 . 20:42 .. 3 20:43 test.bat 3 bajtw 271 859 712 bajtw wolnych 00.08.04 00.08.04 00.08.04

BAT 1 plik(w) 2 katalog(w)

C:\BATCH>_

Pierwsza linia zawiera tekst wydanej komendy. W linii drugiej interpreter wypisa tre polecenia wystpujcego w pliku wsadowym. Kolejne linie zawieraj wynik wykonanania polecenia DIR. Przykad ten pokazuje sposb postpowania podczas wykonywania pliku wsadowego command.com czyta lini pliku wsadowego, wypisuje j na ekranie a nastpnie uruchamia odpowiedni program lub polecenie wewntrzne. Po zakoczeniu wykonywania polecenia proces si powtarza - odczyta kolejn lini, wypisze jej tre na ekranie a nastpnie uruchomi odpowiedni program, itd. Polecenie ECHO mona wyda z argumentem ON lub OFF. Instrukcja
ECHO OFF

powoduje wyczenie wypisywania treci polece wystpujcych w pliku wsadowym. Od momentu wykonania tej instrukcji command.com nie bdzie wypisywa treci przetwarzanych komend a jedynie ich wyniki. Bardzo czsto instrukcj powysz umieszcza si w pierwszej linii pliku wsadowego. Uycie argumentu ON powoduje oczywicie wczenie wypisywania treci polece. Z analizy wydruku dowolnego pliku wsadowego zawierajcego w pierwszej linii komend ECHO OFF mona wywnioskowa, e wyczone t komend wypisywanie treci polece obowizuje dopiero od linii drugiej - command.com zawsze wypisze tre pierwszej komendy pliku, czyli ECHO OFF. Aby tego unikn naley lini t poprzedzi znakiem '@' ("at") - linia pliku, ktra poprzedzona jest tym znakiem nigdy nie jest wywietlana na ekranie. Podsumowujc: istniej dwie metody cakowitego wyczenia wypisywania treci komend pliku wsadowego: 1. umieszczenie w pierwszej linii komendy @ECHO OFF, 2. rozpoczynanie kadej linii pliku znakiem '@'.

Instrukcja warunkowa (1) Niemal wszystkie wykonywane programy podczas pracy s "zmuszane przez uytkownika" do podejmowania pewnych decyzji. Program niejednokrotnie musi decydowa jakiego rodzaju informacje powinien wywietli, czy w danym momencie zareagowa na klawisze naciskane na klawiaturze, jak operacj naley wykona, czy zakoczy swoje dziaanie, itp. Do podejmowania w programach tego typu decyzji suy instrukcja warunkowa. W pliku wsadowym instrukcja ta moe mie jedn z trzech postaci.
IF EXIST plik komenda albo IF NOT EXIST plik komenda

Instrukcja w tej postaci pozwala na wykonananie dowolnego polecenia tylko wwczas, gdy istnieje podany plik (lub gdy nie istnieje jeli uyto NOT). Rozwamy dwie nastpujce komendy:
[1] DEL lista.txt > NUL [2] IF EXIST lista.txt DEL lista.txt > NUL

Polecenie [1] jest oczywiste: usu plik lista.txt. Polecenie [2] mwi: jeeli istnieje plik lista.txt, to usu ten plik. Efekt kocowy obu polece jest taki sam - zostanie usunity plik lista.txt. Pomidzy tymi poleceniami istnieje jednak pewna rnica; o poleceniu [2] mona by powiedzie, e "jest lepsze". Ot polecenie DEL usuwa podany plik i nie wywietla adnych komunikatw o usuniciu pliku, jeeli jednak usuwany plik nie istnieje, to wykonanie polecenia jest niemoliwe - zostanie wwczas wywietlony komunikat o bdzie - mimo przekierowania wyjcia polecenia do pliku pustego komunikat w pojawi si na ekranie. Taka sytuacja nie bdzie miaa miejsca w przypadku polecenia [2]: to polecenie bowiem wykona komend DEL lista.txt tylko wwczas, gdy plik lista.txt istnieje - jeeli w katalogu biecym pliku nie ma, to komenda jest pomijana i na tym koczy si wykonanie caej instrukcji warunkowej. Polecenie DEL mona tutaj zastpi inn komend, np:
[1] TYPE lista.txt [2] IF EXIST lista.txt TYPE lista.txt

W tym wypadku mamy doczynienia z t sam sytuacj: jeeli nie istnieje plik lista.txt, to polecenie [1] wypisze komunikat o bdzie - nie zrobi tego natomiast polecenie [2]. Etykiety i instrukcja skoku GOTO Rozwaymy przkad troch trudniejszy. Naley utworzy kopi pliku lista.txt pod nazw lista.bak. Tutaj rwnie wskazane jest wykorzystanie instrukcji warunkowej:
@ECHO OFF IF EXIST lista.txt COPY lista.txt lista.bak > NUL

Jeeli w katalogu biecym istnieje plik lista.txt zostanie wykonane polecenie utworzenia jego kopii pod nazw lista.bak. Konstruujc powyszy plik naley przewidzie jeszcze jedn sytuacj: w katalogu biecym moe rwnie istnie plik o nazwie lista.bak. Powstaje wwczas pytanie "co w tej sytuacji zrobi polecenie COPY?" - albo wywietli komunikat o bdzie i nie wykona kopiowania, albo te skopiuje plik rdowy usuwajc przy tym zawarto istniejcego pliku docelowego - w pewnych sytuacjach obie z tych moliwoci mog okaza si niezadawalajce. Istniej oczywicie metody rozwizania tego problemu za pomoc opcji polecenia COPY, warto jednak pamita, e opcje polece czsto zmieniaj si w rnych wersjach interpretera command.com i komenda, ktra poprawnie wykonuje si na naszym komputerze moe w innej wersji interpretera zosta uznana za niepoprawn z powodu bdnej opcji polecenia. Powyszy przykad demonstruje problem wykonania komendy tylko wwczas, gdy spenione s dwa lub wicej okrelonych warunkw - problemy tego typu rozwizuje si na og za pomoc instrukcji skoku GOTO.

Instrukcja:
:Etykieta

definiuje tzw. etykiet w pliku wsadowym. Etykieta to inaczej mwic sowna nazwa linii pliku, umieszczajc instrukcj etykiety nazywamy lini pliku podan po znaku ':' nazw. Nazwa etykiety powinna by jednym sowem nie zawierajcym odstpw (mona poaczy sowa znakiem '_') i powinna rozpoczyna si tu za znakiem ':', nie naley rozdziela nazwy i znaku ':' odstpami. Podczas wykonywania pliku wsadowego interpreter pomija linie pliku zawierajce etykiety (podobnie jak ma ty miejsce w przypadku polecenia komentarza REM), instrukcji tej nie wykonuje si, suy ona jedynie do przenoszenia wykonywania pliku przez instrukcj skoku GOTO:
GOTO Etykieta

Wykonanie instrukcji skoku polega na przeniesieniu wykonywania pliku do tej linii w pliku, ktra zawiera (jest nazwana) podan etykiet (wpisujemy tutaj tylko nazw etykiety, bez znaku ':'). Wrmy teraz do przykadu usuwania pliku:
[1] [2] [3] [4] [5] [6] [7] [8] @ECHO OFF IF EXIST lista.txt GOTO Usuwaj ECHO Nie ma takiego pliku... GOTO Koniec :Usuwaj ECHO Usuwanie pliku lista.txt... DEL lista.txt > NUL ECHO Wykonane...

[9] :Koniec

W linii [2] nastpuje sprawdzenie istnienia w katalogu biecym pliku lista.txt. Jeeli plik istnieje wykonana zostanie komenda GOTO Usuwaj - nastpi przejcie (przeniesienie wykonywania) do linii oznaczonej etykiet Usuwaj, czyli do linii [5]. Linia ta zostanie zignorowana przez command.com, ktry rozpocznie wykonywanie pliku od linii nastpnej [6]. Wypisany zostanie tekst "Usuwanie pliku lista.txt...", nastpnie interpreter wykona lini [7] usuwajc plik lista.txt, wypisze tekst "Wykonane..." i zakoczy wykonywanie pliku na ostatniej linii [9]. Podczas wykonywania linii [2] moe si oczywicie okaza, e katalog biecy nie zawiera pliku lista.txt. Instrukcja warunkowa wwczas pominie podan komend GOTO Usuwaj i wykonana zostanie komenda nastpna w linii [3] - wypisanie tekstu "Nie ma takiego pliku..." oraz komenda w linii [4] - przejcie do etykiety Koniec. Warto jeszcze zwrci uwag na lini [4]. Brak tej linii spowodowaby wypisanie tekstu "Nie ma takiego pliku..." a nastpnie wykonanie komendy w liniach [6], [7] i [8], czyli pomimo nieistnienia pliku byyby wykonywane polecenia zwizane z jego usuniciem. Plik wsadowy wykonujcy wspomniane wczeniej kopiowanie pliku lista.txt na lista.bak mgby mie posta:
@ECHO OFF IF NOT EXIST lista.txt GOTO BrakPliku IF EXIST lista.bak GOTO IstniejeKopia ECHO COPY ECHO GOTO Kopiowanie lista.txt na lista.bak... lista.txt lista.bak > NUL Wykonane... Koniec

:BrakPliku ECHO Plik lista.txt nie istnieje... GOTO Koniec :IstniejeKopia

ECHO Plik lista.bak ju istnieje... :Koniec

Argumenty plikw wsadowych Podobnie jak polecenia i programy pliki wsadowe mona uruchamia z argumentami. Do poszczeglnych argumentw pliku mona si od odwoywa za pomoc symboli %1, %2, ..., %9, ktre reprezentuj odpowiednio pierwszy, drugi, ..., dziewity argument pliku. Przykad: Napisa plik wsadowy mydel.bat, ktry usunie plik podany jako argument.
@ECHO OFF IF EXIST %1 GOTO Usuwaj ECHO Plik %1 nie istnieje... GOTO Koniec :Usuwaj ECHO Usuwanie pliku %1 ... DEL %1 > NUL ECHO Wykonane... :Koniec

UWAGA: plik naley uruchomi z argumentem bdcym nazw pliku - jego brak moe spowodowa bd wykonania i w konsekwencji komunikat o wymaganym argumencie. Interpreter podczas analizy linii pliku wszystkie wyraenia postaci %1, %2, ..., %9 zastpuje faktycznymi argumentami podanymi w linii komend:
C:\TEMP>mydel.bat lista.txt Usuwanie pliku lista.txt ... Wykonane... C:\TEMP>_

Wida powyej, e w linii drugiej interpreter zamiast symbolu %1 wypisa faktycznie podany argument w wywoaniu lista.txt. Jeeli plik wsadowy uruchamiamy bez argumentw to wszystkie wyraenia %1, %2, ..., %9 s napisami pustymi (napis nie zawierajcy adnych znakw). Jeeli w linii komend wystpuje N argumentw, to wyraenia %1, ..., %N reprezentuj podane argumenty, wyraenia %N+1, %N+2, ... s natomist napisami pustymi. Nasuwa si proste pytanie, czy plik wsadowy mona przetworzy z dziesicioma lub wicej argumentami. Odpowied w zasadzie jest twierdzca, ale o tym nieco pniej... Instrukcja warunkowa (2) Druga posta instrukcji warunkowej dotyczy porwnywania napisw:
IF "napis1" == "napis2" komenda albo IF NOT "napis1" == "napis2" komenda

Instrukcja w tej postaci powoduje wykonanie podanej komendy tylko wwczas, gdy oba napisy napis1 i napis2 s rwne, czyli takie same. Sowo rwno oznacza tutaj rwno idealn - napisy musza mie tak sam dugo i skada si z takich samych znakw. W przypadku nazw plikw i katalogw due i mae litery nie s rozrnialne, w przypadku porwnywania napisw brane jest to pod uwag. Tak wic napisy "Lista.txt" oraz "lista.txt" wcale nie s rwne. Warto pamita, e bezpieczniej jest podawa porwnywane napisy w cudzysowie oraz pomidzy napisami a znakiem '=' umieci znak odstpu - jego brak moe spowodowa bd wykonania pliku. Ta posta instrukcji warunkowej posuy nam przede wszystkim do sprawdzania iloci podanych argumentw. Korzystajc o obu postaci instrukcji moemy napisa ostateczn wersj pliku

wsadowego mydel.bat usuwajcego plik podany jako argument, przyjmujc przy tym nastpujce zaoenia:

plik wsadowy moe by uruchomiony z argumentem '/?' - naley wwczas wywietli informacj o przeznaczeniu oraz opis skadni, uruchomienie pliku z jednym argumentem bdcym nazw pliku powoduje jego usunicie lub wypisaniu komunikatu o bdzie, jeeli plik zosta uruchomiony z dwoma lub wiksz iloci argumentw, to jeli pierwszym z nich jest '/?', to wywietlamy informacj o przeznaczeniu i skadni, jeeli natomiast pierwszy argument jest nazw pliku, to wypisujemy komunikat o bdzie i skadni.

@ECHO OFF REM REM Usuwa plik podany jako argument REM IF IF IF IF "%1" == "/?" GOTO Informacja "%1" == "" GOTO BrakArgumentu NOT "%2" == "" GOTO ZbytWieleArgumentow EXIST %1 GOTO Usuwaj

ECHO Plik [%1] nie istnieje. GOTO Koniec :Usuwaj ECHO Usuwanie [%1] DEL %1 > NUL GOTO Koniec :BrakArgumentu ECHO Oczekiwany argument. GOTO Skladnia :ZbytWieleArgumentow ECHO Zbyt wiele argumentw. GOTO Skladnia :Informacja ECHO Usuwa podany plik. :Skladnia ECHO Skadnia polecenia: ECHO MYDEL [/?] nazwa_pliku :Koniec

Uff... Mimo i czynno jest stosunkowo prosta, to konstrukcja pliku wymaga sporego nakadu pracy. Przeanalizujemy krtko poszczeglne warunki zadania. Z przyjtych zaoe wynika, e dopuszczalne s wywoania: "mydel /?", "mydel /? /?", "mydel /? lista.txt", "mydel /? lista.txt lista.bak" - dopuszczalne jest kade wywoanie, w ktrym pierwszy argument jest rwny "/?". W zwizku z tym w pliku wsadowym w pierwszej kolejnoci sprawdzamy wystpienie tego wanie argumentu. Kolejne instrukcje warunkowe dotycz ju przypadkw uruchomienia bez argumentw lub z argumentami, ale z pierwszym argumentem rnym od "/?". Sprawdzamy najpierw czy podano jakikolwiek argument. Trzecia istrukcja IF dotyczy przypadku: podano co najmniej jeden argument i argument pierwszy

jest nazw pliku. Wwczas usuwamy plik jeeli jest to jedyny argument lub wypisujemy komunikat o bdzie gdy podano wicej ni jedn nazw pliku. Ilo podanych argumentw, a waciwie to czy argument jest jeden, sprawdzamy porwnujc argument drugi %2 z napisem pustym. Ostatnie IF dotyczy ju tylko przypadku: podano dokadnie jeden argument bdcy nazw pliku pozostaje wic sprawdzi czy podany plik istnieje. Instrukcja CALL Jak wspomniano na pocztku w pliku wsadowym mona uywa dowolnych polece wewnetrznych i programw wykonywalnych (com i exe). Polecenie pliku wsadowego nie moe natomiast by plikiem wsadowym. Uruchomienie w pliku wsadowym innego pliku wsadowego wymaga zastosowania polecenia:
CALL plik_wsadowy [argumenty]

Do tej pory stosowane byy instrukcje skoku zawsze do etykiety pooonej "poniej" w pliku wsadowym. Istnieje moliwo przeniesienia wykonywania pliku do linii wczeniejszej, czyli "powyej" - tego typu konstrukcj, tzn. etykiet oraz wystpujc poniej instrukcj skoku do tej wanie etykiety nazywamy ptl. Ptle czsto stosuje si w poczeniu z instrukcj SHIFT. Polecenie SHIFT wykonuje tzw. przesunicie argumentw, tzn. argument pierwszy %1 zastpowany jest przez argument drugi %2, argument drugi %2 zastpowany jest przez argument trzeci %3, itd. Oglnie: argument %N zastpowany jest przez argument %(N+1). UWAGA: W wyniku wykonania polecenia argument pierwszy pliku wsadowego jest bezpowrotnie tracony nie ma moliwoci odwoania si do tego argumentu. Demonstruje to poniszy przykad:
@ECHO OFF ECHO Arg1=[%1] SHIFT ECHO Arg1=[%1] SHIFT ECHO Arg1=[%1] SHIFT ECHO Arg1=[%1] SHIFT ECHO Arg1=[%1] SHIFT ECHO Arg1=[%1] Arg2=[%2] Arg3=[%3] Arg4=[%4] Arg2=[%2] Arg3=[%3] Arg4=[%4] Arg2=[%2] Arg3=[%3] Arg4=[%4] Arg2=[%2] Arg3=[%3] Arg4=[%4] Arg2=[%2] Arg3=[%3] Arg4=[%4] Arg2=[%2] Arg3=[%3] Arg4=[%4]

Tak wyglda wykonanie pliku z picioma argumentami:


C:\TEMP>argumen.bat list1.txt list2.txt list3.txt list4.txt list5.txt Arg1=[list1.txt] Arg2=[list2.txt] Arg3=[list3.txt] Arg4=[list4.txt] Arg1=[list2.txt] Arg2=[list3.txt] Arg3=[list4.txt] Arg4=[list5.txt] Arg1=[list3.txt] Arg2=[list4.txt] Arg3=[list5.txt] Arg4=[] Arg1=[list4.txt] Arg2=[list5.txt] Arg3=[] Arg4=[] Arg1=[list5.txt] Arg2=[] Arg3=[] Arg4=[] Arg1=[] Arg2=[] Arg3=[] Arg4=[]

Po pierwszym wykonaniu polecenia SHIFT wyraenie %1 reprezentuje ju napis list2.txt, wyraenie %2 napis list3.txt i tak dalej. Po wykonaniu drugim wyraenie %1 jest rwne list3.txt, za %4 jest w ogle napisem pustym - %4 musiaoby reprezentowa szsty argument podany w wywoaniu, tymczasem podano tylko pi argumentw. Po pitym wywoaniu wszystkie argumenty maj warto pust!. Oglnie: jeeli plik wsadowy uruchomiony zosta z N argumentami, to po N-1 wykonaniu instrukcji SHIFT ostatni z podanych argumentw znajduje si na miejscu %1, po wykonaniu N-tym plik wsadowy w ogle nie ma argumentw. Oto prosty przykad pliku wsadowego argument.bat, ktry umieszcza w pliku o nazwie argument.txt wszystkie podane argumenty, kady w osobnej linii.

@ECHO OFF IF "%1" == "/?" GOTO Informacja :Start IF "%1" == "" GOTO Koniec ECHO %1 >> argument.txt SHIFT GOTO Start :Informacja ECHO Umieszcza w pliku argument.txt wszystkie podane argumenty. ECHO Skadnia polecenia: ECHO ARGUMENT [/?] [arg1 arg2 ...] :Koniec

Jeli pierwszy argument jest rwny "/?" zostanie wywietlona pomoc. W pozostaych przypadkach wykonywana jest ptla od etykiety Start do instrukcji skoku GOTO Start. Najwaniejsz instrukcj kadej ptli jest instrukcja przerwania ptli, czyli przeniesienia wykonywania pliku poza ptl. W tym wypadku zadanie to wykonuje polecenie IF, ktre sprawdza niepusto argumentu %1. Cay cykl powtarzany jest tak dugo a argument %1 osignie warto napisu pustego. Poniewa wewntrz ptli wystpuje polecenie SHIFT w ktrym momencie skocz si argumenty pliku i wykonywanie ptli zostanie zakoczone. Konstruujc ptl naley zawsze stworzy warunki umoliwiajce jej zakoczenie. Nietrudno przewidzie jaki efekt mona osign po usuniciu z powyszego pliku instrukcji SHIFT. Wwczas podczas wykonywania ptli argumenty nie ulegayby adnym zmianom co oznacza, e ptla mogaby si nigdy nie skoczy. Ten sam skutek przyniosoby usunicie instrukcji wyjcia z ptli IF. W tym wypadku argumenty do ich wyczerpania ulegayby zmianom, nie wpynoby to jednak na instrukcj GOTO Start, ktra zawsze wykonywaaby skok do podanej etykiety. Tak sytuacj nazywamy czsto "zaptleniem lub powieszeniem programu". Jeeli uywamy w pliku wsadowym ptli wskazane jest przedsiwzicie pewnych rodkw ostronoci. Ot wykonanie pliku wsadowego mona przerwa naciskajc klawisz Ctrl+C. Wwczas command.com moe zareagowa na nacinity klawisz i zakoczy wykonywanie pliku, aby jednak byo to moliwe naley ustawi wykrywalno tego klawisza poleceniem:
BREAK ON

Polecenie to mona wyda na klawiaturze, albo umieci w pliku wsadowym przed rozpoczciem ptli - najlepiej na pocztku pliku. Samo polecenie BREAK bez argumentu ON lub OFF wywietla jedynie stan reakcji na klawisz Ctrl+C. Warto pamita:
NIEOMYLNO = FORMAT C:

co mniej wicej znaczy tyle, e kres wiary we wasne umiejtnoci zawsze idzie w parze z utrat czci dysku. Ptle wykorzystujemy na og, gdy okrelon czynno trzeba wykona na wikszej liczbie liczbie plikw. Majc do dyspozycji plik wsadowy mydel.bat usuwajcy jeden podany plik, zadanie polegajce na usuniciu wszystkich plikw bdcych argumentami pliku wsadowego sprowadza si wycznie do wywoania pliku mydel.bat tak ilo razy, ile plikw mamy usun. Przykad: Napisa plik wsadowy usuwajcy wszystkie pliku podane w postaci argumentw.
@ECHO OFF BREAK ON :Start IF "%1" == "" GOTO Koniec

CALL mydel.bat %1 SHIFT GOTO Start :Koniec

Obsug bdw oraz "pomoc" naley dopisa samodzielnie. Instrukcja warunkowa (3) I to chyba jest ten moment, ktry nazwa mona "wysz szko jazdy"... Ale najpierw troch niezbdnej teorii. Kiedy program koczy swoje dziaanie ma moliwo poinformowania systemu operacyjnego o stanie swojego zakoczenia. Przekazana informacja jest dosy uboga albowiem moe by zaledwie nieujemn liczb cakowit, ale o tym, e w wiecie komputerw jedna liczba moe by informacj bardzo obszern nikogo przekonywa nie trzeba. Liczb t nazywamy kodem wyjcia programu. Z moliwoci tej programy nie zawsze korzystaj i czsto program nie pozostawia po sobie adnej informacji - wwczas system operacyjny traktuje taki stan zakoczenia jako poprawny i przyjmuje, e zakoczony program pozostawi po sobie kod zero (czsto mwimy te, e program zakoczy si z kodem zero). Nie oznacza to wcale, e liczby rne od zera oznaczaj bdne zakoczenie programu; jest to czsto przyjmowana w informatyce regua na mocy ktrej liczba zero oznacza poprawne wykonanie okrelonej operacji. Instrukcja warunkowa w trzeciej postaci suy wanie do sprawdzania stanu zakoczenia ostatnio wykonanego programu lub komendy:
IF ERRORLEVEL kod_wyjcia komenda albo IF NOT ERRORLEVEL kod_wyjcia komenda

Kod_wyjcia jest tutaj liczb naturaln, komenda poleceniem do wykonania. Instrukcja w tej postaci wykona podan komend tylko wwczas, gdy ostatnio wykonywane polecenie zwrcio kod wyjcia wikszy lub rwny podanej liczbie (w przypadku uycia NOT mniejszy od podanej liczby). Z tej postaci instrukcji warunkowej korzysta bdziemy wycznie przy sprawdzaniu kodu wyjcia polecenia CHOICE, ktre stosuje si w systemie MS-DOS do zadawania rnego rodzaju pyta. Skadnia polecenia jest nastpujca:
CHOICE [/C:odpowiedzi] [/N] [/T:Z,XY] [tekst]

Co robi polecenie CHOICE? Po wydaniu komendy CHOICE bez argumentw na ekranie zostanie wywietlony napis "[T,N]?" a nastpnie program bdzie czeka do momentu nacinicia jednej z liter 'T' lub 'N'. Wydanie polecenia w postaci CHOICE /C:12A* spowoduje wypisanie tekstu "[1,2,A,*]?" i oczekiwanie programu na nacinicie ktrego z podanych znakw. Jeeli podamy okrelony tekst, to program wypisze go a nastpnie wywietli list dopuszczalnych odpowiedzi. Uycie opcji "/N" spowoduje, e nie zostanie wywietlona lista odpowiedzi, opcja "/T" okrela odpowied domyln Z po XY sekundach. Po wydaniu polecenia:
CHOICE /C:ABX /N /T:0,5 "Rodzaj szkoy? [A-podst, B-redn, X-adna] : "

na ekranie pojawi si tekst "Rodzaj szkoy? [A-podst, B-redn, X-adna] : " a nastpnie program bdzie czeka na nacinicie jednego z klawiszy A, B, X przez maksymalnie 5 sekund - niewybranie adnej z odpowiedzi jest rwnoznaczne z wybraniem odpowiedzi domylnej, czyli odpowiedzi X. Program po wyborze odpowiedniego klawisza bd po upywie dopuszczalnego czasu koczy swoje dziaanie zwracajc do systemu operacyjnego kod wyjcia, ktry jest numerem odpowiedzi na podanej licie, tzn. po wyborze A program zwrci 1, po wyborze B liczb 2, za po wyborze X liczb 3. Przykad:

Napisa plik wsadowy, ktry bdzie potrafi uruchomi jeden z trzech programw w zalenoci od wyboru uytkownika, np. Norton Commander lub Windows.
@ECHO OFF :Start CLS ECHO _ ECHO _ ECHO [ 1 ]. Norton Commander ECHO [ 2 ]. Turbo Pascal ECHO [ 3 ]. Windows ECHO [ Q ]. Zakocz ECHO _ ECHO _ CHOICE /C:123Q /N "Wybierz program do uruchomienia : " IF ERRORLEVEL 4 GOTO Koniec IF ERRORLEVEL 3 GOTO Windows IF ERRORLEVEL 2 GOTO Pascal ECHO Trwa uruchamianie Norton Commandera... C:\NC\NC.EXE GOTO Start :Windows ECHO Trwa uruchamianie systemu Windows... C:\WINDOWS\WIN.COM GOTO Koniec :Pascal ECHO Trwa uruchamianie Turbo Pascala... C:\TP7\TURBO.EXE GOTO Start :Koniec

Linie zawierajce polecenie ECHO z kresk podkrelenia naley wpisa w nastpujcy sposb: po wpisaniu sowa ECHO naley wpisa klawisz spacji a nastpnie nacisn i przytrzyma klawisz Alt i przy wcinitym klawiszu Alt na klawiaturze numerycznej (z prawej strony) wpisa kod znaku 255 po czym mona zwolni klawisz Alt - kursor powinien si wwczas przesun o jedn pozycj w lewo, a wszystko to po to, aby zmusi polecenie ECHO do wypisania pustej linii. Podane w pliku ciezki dostpu musz oczywicie by poprawne - mona je nawet zmieni na cieki do innych programw. Zwrcmy uwag na kolejno sprawdzania kodu wyjcia polecenia CHOICE. Instrukcje warunkowe porwnuj kod wyjcia od wartoci najwikszej moliwej czyli 4 w d do wartoci przedostatniej 2 - pominicie wszystkich IF jest rwnowane z wyborem odpowiedzi pierwszej. Taki sposb sprawdzania wartoci kodu jest konsekwencj sposobu wykonywania instrukcji warunkowej - jeeli w pierwszej instrukcji IF umiecilibymy kod 2, to spenienie tego warunku mwioby tylko tyle, e wybrano odpowied 2, 3 lub 4. Mona przyj, e sprawdzanie kodu wyjcia zawsze wykonujemy w ten sam sposb od wartoci najwikszych do najmniejszych - cho oczywicie mona wykona to inaczej. Pozostaje tylko doda, e uruchomienia systemu Windows podczas pracy Windows jest raczej niewykonalne i zakoczy si odpowiednim komunikatem. Mona to jednak zrobi podczas pracy trybu MS-DOS (tryb MS-DOS jest czym innym ni Wiersz polece). Kto zamierza to sprawdzi, powinien odnale plik C:\autoexec.bat i w ostatnim wierszu tego pliku wpisa polecenie uruchamiajce powyszy plik wsadowy, czyli np. CALL C:\TEMP\mymenu.bat, po czym wykona "reboot" komputera. Przykad:

Jako drugi przykad wykorzystania trzeciej postaci instrukcji warunkowej napiszemy plik wsadowy zmieniajcy nazw pliku. Obsug bdw oraz informacje o przeznaczeniu naley uzupeni samodzielnie.
@ECHO OFF BREAK ON :Usuwaj IF NOT EXIST %2 GOTO MoznaZmienic CHOICE /C:TN "Plik %2 ju istnieje. Usun istniejcy plik " IF ERRORLEVEL 2 GOTO Koniec DEL %2 > NUL :MoznaZmienic ECHO Przenoszenie %1 na %2 REN %1 %2 > NUL GOTO Koniec :Koniec

Przejcie do etykiety Usuwaj powinno nastpi w sytuacji gdy podano dwa argumenty bdce nazwami plikw i argument pierwszy jest nazw istniejcego pliku. Wwczas jeeli nie istnieje plik podany jako drugi argument, to zmieniamy nazw pliku, w przeciwnym wypadku zadajemy pytanie czy usun istniejcy plik. Po odpowiedzi negatywnej przechodzimy na koniec pliku wsadowego, w przypadku odpowiedzi pozytywnej usuwamy istniejcy plik i wykonujemy zmian nazwy. Instrukcja iteracyjna FOR Instrukcje iteracyjne (powtarzajce, zwane te ptlami) su w jzykach programowania do wielokkrotnego wykonywania podobnych czynnoci. Oglnie dzieli si instrukcje iteracyjne na ptle o znanej lub niemoliwej do przewidzenia z gry liczbie powtrze. Sformuowanie "o znanej liczbie powtrze" wymaga pewnego wyjanienia. Przez znan ilo iteracji rozumie si tu ilo znan nie w momencie pisania programu lub pliku wsadowego, tylko ilo znan w momencie rozpoczcia wykonywania ptli. I tak na przykad: jeeli ptla zostanie powtrzona tyle razy ile plikw zawiera katalog biecy, to mimo i nie moemy przewidzie ile plikw bdzie zawiera katalog traktujemy t ptl jako ptl o znanej liczbie powtrze - liczba t bdzie bowiem znana w momencie rozpoczynania ptli. Rwnie omwiony wczeniej przykad pliku wsadowego, ktry usuwa wszystkie pliki podane jako argumenty jest przykadem ptli o znanej liczbie powtrze plik mona uruchomi z kad liczb argumentw, niemniej jednak liczba ta zawsze jest znana w momencie uruchomienia pliku wsadowego. A oto przykad ptli o niemoliwej do ustalenia z gry liczbie powtrze:
:Start CHOICE /C:TN "Powtrzy ?" IF ERRORLEVEL 2 GOTO Koniec GOTO Start :Koniec

Przerwanie ptli nastpuje w momencie nacinicia klawisza 'N' - nie mona z gry przewidzie ile razy uytkownik wybierze odpowied 'T'. Instrukcja iteracyjna FOR pliku wsadowego jest ptl o znanej liczbie powtrze i nastpujcej skadni:
FOR %%X IN (lista) DO komenda

Argument lista jest obowizkowy i zawiera pooddzielane znakami odstpu nazwy plikw - w nazwach tych mog wystpowa znaki wieloznaczne '?' i '*'. Po znakach '%%' pojemy tzw. zmienn - odpowiednik niewiadomej w matematyce. Zmienna ta bdzie kolejno przybiera wszystkie moliwe wartoci spord wartoci podanych na licie (lista). Dla kadej moliwej wartoci

zmiennej X zostanie wykonane polecenie komenda. Rozwamy przykad:


[1] FOR %%A IN (1 2 3) DO DIR [2] FOR %%K IN (zadanie zadanie.bat zadanie.bak) DO DIR

Kada z powyszych instrukcji przyniesie ten sam efekt - trzy razy zostanie wykonane polecenie DIR. W przykadzie [1] zmienna A przybierze (otrzyma) warto "1" a nastepnie nastpi wykonanie polecenia DIR. Po wykonaniu komendy zmienna A otrzyma warto "2" i ponownie nastpi wykonanie komendy. po jej zakoczeniu zmienna A otrzyma warto "3" i zostanie wykonana komenda. Na tym zakoczy si wykonywanie polecenia FOR. W przykadzie [2] bdzie dokdnie tak samo z t tylko rnic e zmienna bdzie przyjmowa wartoci "zadanie", "zadanie.bat" oraz "zadanie.bak". Odpowied na pytanie po co zmienna przyjmuje wartoci z listy staje si oczywista jeli powiemy, e wyraenie %%X moe wystpowa w treci podanej komendy i reprezentuje aktualn warto zmiennej X, podobnie jak %1 reprezentuje pierwszy argument pliku wsadowego. Tak wic, wykonanie polecenia:
FOR %%A IN (1 2 3 4 5 6 7 8 9 0) DO ECHO Warto zmiennej = %%A

spowoduje wypisanie dziesiciu linii zawierajcych tekst "Warto zmiennej = " oraz odpowiedni cyfr z listy. Polecenie
FOR %%A IN (*.txt *.bak) DO COPY %%A C:\TEMP

skopiuje wszystkie pliki z katalogu biecego z rozrzerzeniami txt lub bak do podanego katalogu C:\TEMP. Zadania do samodzielnego rozwizania Wszystkie pliki wsadowe powinny dziaa we wszystkich moliwych przypadkach zwizanych z istnieniem plikw. Naley rwnie zadba o to, aby podczas wykonywania plikw wywietlane byy wycznie informacje wypisywane przez polecenie ECHO pliku wsadowego. 1. Napisa plik wsadowy, ktry zmieni nazw pliku (np. lista.txt) na tak sam, ale z innym rozszerzeniem. 2. Napisa plik wsadowy, ktry poczy dwa dowolnie wybrane pliki w jeden plik o nazwie wynik.txt. 3. Napisa plik wsadowy, ktry zamieni zawarto dwch dowolnie wybranych plikw. 4. Korzystajc m.in. z polece find oraz sort napisa plik wsadowy mydir.bat, ktry wywietli zawarto katalogu biecego. Na wydruku powinny by widoczne tylko pliki i katalogi. Wydruk powinien zawiera w pierwszej kolejnoci list plikw a nastpnie list katalogw. Zarwno pliki jak i katalogi naley posortowa alfabetycznie. Nie wolno korzysta z adnych opcji polecenia dir, mona natomiast skorzysta z tymczasowych plikw pomocniczych. 5. Napisa plik wsadowy mycopy.bat sucy do tworzenia kopii pliku pod inn nazw, przyjmujc nastpujce zaoenia:
o

plik dziaa tylko w przypadku gdy zosta uruchomiony z dwoma rnymi argumentami, jeeli plik o takiej nazwie jak nazwa kopii ju istnieje, to nie wykonujemy kopiowania.

6. Napisa plik wsadowy myren.bat sucy do zmiany nazwy na nazw podan, przyjmujc nastpujce zaoenia:
o o

plik dziaa tylko w przypadku gdy zosta uruchomiony z dwoma argumentami, jeeli oba argumenty s takie same, to jeli plik istnieje nie wykonujemy adnych czynnoci, jeli natomiast pliku nie ma wypisujemy komunikat o bdzie, jeeli plik o takiej nazwie jak nowa nazwa pliku ju istnieje, to wypisujemy komunikat o bdzie.

7. Napisa plik wsadowy mycopy.bat sucy do tworzenia kopii pliku pod inn nazw, przyjmujc nastpujce zaoenia:
o o o

plik moe by uruchomiony z dowoln iloci argumentw, jeeli nie podano argumentw wypisujemy skadni, jeeli pierwszy argument jest rwny "/?" wypisujemy informacj o przeznaczeniu i skadni, jeeli podano argumenty i pierwszy z nich nie jest rwny "/?" to prbujemy wykona kopiowanie gdy podano dokadnie dwa rne argumenty, w przeciwnym wypadku (gdy podano wicej ni dwa, gdy podano jeden argument lub gdy argumenty s dwa, ale takie same) wypisujemy komunikat o bdzie, jeeli plik o takiej nazwie jak nazwa kopii ju istnieje, to nie wykonujemy kopiowania.

8. Napisa plik wsadowy myren.bat sucy do zmiany nazwy pliku pod podan, przyjmujc nastpujce zaoenia:
o o o

plik moe by uruchomiony z dowoln iloci argumentw, jeeli nie podano argumentw wypisujemy skadni, jeeli pierwszy argument jest rwny "/?" wypisujemy informacj o przeznaczeniu i skadni, jeeli podano argumenty i pierwszy z nich nie jest rwny "/?" to prbujemy zmieni nazw gdy podano dokadnie dwa argumenty, w przeciwnym wypadku (gdy podano wicej ni dwa, gdy podano jeden argument lub gdy argumenty s dwa, ale takie same) wypisujemy komunikat o bdzie, jeeli plik o takiej nazwie jak nazwa kopii ju istnieje, to usuwamy go, a nastpnie wykonujemy zmian nazwy pliku, jeeli argumenty s dwa i s takie same oraz plik istnieje, to efekt powinien by taki, jakgdyby zmieniono nazw pliku.

You might also like