Budowa pliku wsadowego
Plik wsadowy (ang.
batch file) umożliwia
wykonanie dowolnego ciągu poleceń systemu MS-DOS. Z punktu widzenia systemu
operacyjnego plikiem wsadowym jest każdy plik, którego nazwa posiada
rozszerzenie bat.
Po wydaniu dowolnego polecenia interpreter
command.com sprawdza w
pierwszej kolejności czy wydana komenda jest poleceniem wewnętrznym
(interpretowanym przez command.com) i w przypadku odpowiedzi pozytywnej wykonuje
wydaną komendę. Jeżeli jednak interpreter nie rozpoznaje polecenia to przyjmuje,
że użytkownik zarządał uruchomienia programu.
Dla przykładu przyjmijmy, że wpisano komendę
sleep 10
Command.com poszukuje wówczas pliku o nazwie o nazwie sleep.com, następnie pliku sleep.exe i ostecznie pliku sleep.bat. Po znalezieniu jednego z dwóch pierwszych zbiorów command.com uruchamia znaleziony program, w przypadku znalezienia zbioru bat wykonuje jego interpretację.
Plik wsadowy, aby mógł być poprawnie wykonany (zinterpretowany) powinien
zawierać ciąg poleceń systemu, z których każde powinno być umieszczone w osobnej
linii pliku. Mogą to być polecenia wewnetrzne, polecenia zewnętrzne (programy)
lub polecenia specyficzne dla pliku wsadowego (polecenia, które są dozwolone
tylko w tym pliku).
Oto prosty przykład 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 Naciśnij jakiś klawisz... PAUSE
Aby wykonać powyższy plik należy nadać mu nazwę z rozszerzeniem bat (może być Info.bat) a następnie w katalogu bieżącym wpisać komendę będącą nazwą pliku wsadowego, czyli odpowiednio:
C:\TEMP>info
Interpreter wykonuje sekwencyjnie jedno po drugim wszystkie polecenia pliku wsadowego w kolejności ich występowania. Pierwsza linia pliku (polecenie REM) jest komentarzem jest komentarzem i podczas wykonywania nie jest brana pod uwagę. Dwie kolejne linie zawierają polecenie ECHO, którego wykonanie polega na wypisaniu podanego tekstu na ekranie. Linie 4 i 6 zawierają polecenie MS-DOS wypisania na ekranie podanych plików (TYPE) z podziałem na strony (MORE). Linia ostatnia zawiera polecenie PAUSE, którego wykonanie polega na wypisaniu tekstu "Naciśnij jakiś klawisz, aby kontynuować..." i zatrzymaniu wykonywania pliku wsadowego do czasu naciśnięcia dowolnego klawisza.
Polecenie ECHO
Jeżeli wykonamy plik wsadowy
test.bat zawierający tylko jedną linię z komendą
DIR, to na ekranie zostaną
wypisane dwie rzeczy:
C:\BATCH>test C:\BATCH>dir Wolumin w stacji dysków C nie ma etykiety Numer seryjny woluminu: 364F-10E8 Katalog C:\BATCH . <DIR> 00.08.04 20:42 . .. <DIR> 00.08.04 20:42 .. TEST BAT 3 00.08.04 20:43 test.bat 1 plik(ów) 3 bajtów 2 katalog(ów) 271 859 712 bajtów wolnych C:\BATCH>_
Pierwsza linia zawiera tekst wydanej komendy. W linii drugiej interpreter wypisał treść polecenia występującego w pliku wsadowym. Kolejne linie zawierają wynik wykonanania polecenia DIR. Przykład ten pokazuje sposób postępowania podczas wykonywania pliku wsadowego - command.com czyta linię pliku wsadowego, wypisuje ją na ekranie a następnie uruchamia odpowiedni program lub polecenie wewnętrzne. Po zakończeniu wykonywania polecenia proces się powtarza - odczyta kolejną linię, wypisze jej treść na ekranie a następnie uruchomi odpowiedni program, itd.
Polecenie ECHO można wydać z argumentem ON lub OFF. Instrukcja
ECHO OFF
powoduje wyłączenie wypisywania treści poleceń występujących w pliku
wsadowym. Od momentu wykonania tej instrukcji
command.com nie będzie
wypisywał treści przetwarzanych komend a jedynie ich wyniki. Bardzo często
instrukcję powyższą umieszcza się w pierwszej linii pliku wsadowego.
Użycie argumentu ON powoduje oczywiście włączenie wypisywania treści poleceń.
Z analizy wydruku dowolnego pliku wsadowego zawierającego w pierwszej linii komendę ECHO OFF można wywnioskować, że wyłączone tą komendą wypisywanie treści poleceń obowiązuje dopiero od linii drugiej - command.com zawsze wypisze treść pierwszej komendy pliku, czyli ECHO OFF. Aby tego uniknąć należy linię tą poprzedzić znakiem '@' ("at") - linia pliku, która poprzedzona jest tym znakiem nigdy nie jest wyświetlana na ekranie.
Podsumowując: istnieją dwie metody całkowitego wyłączenia wypisywania treści komend pliku wsadowego:
Instrukcja warunkowa (1)
Niemal wszystkie wykonywane programy podczas pracy są "zmuszane przez
użytkownika" do podejmowania pewnych decyzji. Program niejednokrotnie musi
decydować jakiego rodzaju informacje powinien wyświetlić, czy w danym momencie
zareagować na klawisze naciskane na klawiaturze, jaką operację należy wykonać,
czy zakończyć swoje działanie, itp.
Do podejmowania w programach tego typu decyzji służy
instrukcja warunkowa. W pliku
wsadowym instrukcja ta może 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 wówczas, gdy istnieje podany plik (lub gdy nie istnieje jeśli użyto NOT). Rozważmy dwie następujące 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] mówi: jeżeli istnieje plik lista.txt, to usuń ten plik. Efekt końcowy obu poleceń jest taki sam - zostanie usunięty plik lista.txt. Pomiędzy tymi poleceniami istnieje jednak pewna różnica; o poleceniu [2] można by powiedzieć, że "jest lepsze". Otóż polecenie DEL usuwa podany plik i nie wyświetla żadnych komunikatów o usunięciu pliku, jeżeli jednak usuwany plik nie istnieje, to wykonanie polecenia jest niemożliwe - zostanie wówczas wyświetlony komunikat o błędzie - mimo przekierowania wyjścia polecenia do pliku pustego komunikat ów pojawi się na ekranie. Taka sytuacja nie będzie miała miejsca w przypadku polecenia [2]: to polecenie bowiem wykona komendę DEL lista.txt tylko wówczas, gdy plik lista.txt istnieje - jeżeli w katalogu bieżącym pliku nie ma, to komenda jest pomijana i na tym kończy się wykonanie całej instrukcji warunkowej.
Polecenie DEL można tutaj zastąpić inną komendą, np:
[1] TYPE lista.txt [2] IF EXIST lista.txt TYPE lista.txt
W tym wypadku mamy doczynienia z tą samą sytuacją: jeżeli nie istnieje plik lista.txt, to polecenie [1] wypisze komunikat o błędzie - nie zrobi tego natomiast polecenie [2].