Pliki_WSADOWE.doc

(909 KB) Pobierz



Systemy operacyjne – MS-DOS – pliki wsadowe BAT

Pliki wsadowe systemu DOS

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.

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

wewnętrzne, 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.

REM

Komenda ignorowana. Pozwala na umieszczenie komentarzy w pliku wsadowym

REM komentarz

PAUSE

Przerywa wykonywanie programu wsadowego do momentu naciśnięcia dowolnego klawisza. Po komendzie

można umieścić tekst wyświetlany podczas wykonywania na ekranie.

PAUSE komentarz

PAUSE > NULNie wyświetla żadnej informacji.

EXIST

Sprawdza czy dany plik lub katalog istnieje. Stosowana z IF.

IF [NOT] EXIST [plik/katalog] komenda

ZMIENNE

SET zmienna=wartość- Nadawanie zmiennej wartości

ECHO wartość: %zmienna%- Odczytywanie

IF ”%zmienna%” == ”wartość” komenda - ”ten znak powinien być ale nie zawsze musi być

-1-




Systemy operacyjne – MS-DOS – pliki wsadowe BAT

Budowa pliku wsadowego

1. Polecenie ECHO

2. Instrukcja warunkowa (1)

3. Etykiety i instrukcja skoku GOTO

4. Argumenty plików wsadowych

5. Instrukcja warunkowa (2)

6. Instrukcja CALL

7. Instrukcja warunkowa (3)

8. Instrukcja iteracyjna FOR

1. Polecenie ECHO

Jeżeli wykonamy plik wsadowy a.bat zawierający tylko jedną linię z komendą DIR, to na ekranie zostanie

wypisane (rys1):

rys 1

rys 2

Pierwsza linia zawiera tekst wydanej komendy. W linii drugiej interpreter wypisał treść polecenia

występującego w pliku wsadowym. Kolejne linie zawierają wynik wykonania polecenia DIR.

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 nie

będzie wypisywana treść 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 (cmd) zawsze wypisze treść pierwszej komendy pliku, czyli ECHO OFF (rys 2). Aby

tego uniknąć należy linię tą poprzedzić znakiem '@' - 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:

      1.umieszczenie w pierwszej linii komendy @ECHO OFF,

      2.rozpoczynanie każdej linii pliku znakiem '@'.

-2-




Systemy operacyjne – MS-DOS – pliki wsadowe BAT

ECHO ON½OFF

ECHO

ECHO tekst

ECHO.½,½/½\½+

@

@ECHO OFF

OFF powoduje że linie komend nie są wyświetlane, a jedynie ich wyniki. Domyślnie – ON, która powoduje,

że każda komenda jest wyświetlana wraz ze znakiem gotowości, a dopiero po niej efekt jej działania.

podaje aktualny stan - ON/OFF

wyświetla na ekranie podany ciąg literowy. Nie można wyświetlić znaków: <, >, |

wyświetla pustą linię

analogicznie do ECHO OFF, jednak odwołuje się tylko do linii którą poprzedza.

polecenie umieszczone zazwyczaj na początku pliku wsadowego.

2. 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 wykonanie 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

[2] IF EXIST lista.txt DEL lista.txt

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].

Jeżeli na końcu linijki użyjemy np. \NUL lub >NUL to na ekranie nie zostanie wyświetlona np. zawartość

pliku bo wyświetlenie to zostaje przekierowane do urządzenia pustego. Podobnie jest z wyświetlaniem

informacji typu: Plików skopiowanych 1

3. Etykiety i instrukcja skoku GOTO

Należy utworzyć kopię pliku lista.txt pod nazwą lista.bak. Tutaj również wskazane jest wykorzystanie

instrukcji warunkowej:

@ECHO OFF

IF EXIST lista.txt COPY lista.txt lista.bak

-3-




Systemy operacyjne – MS-DOS – pliki wsadowe BAT

Jeżeli w katalogu bieżącym istnieje plik lista.txt zostanie wykonane polecenie utworzenia jego kopii pod

nazwą lista.bak.

Konstruując powyższy plik należy przewidzieć jeszcze jedną sytuację: w katalogu bieżącym może również

istnieć plik o nazwie lista.bak. Powstaje wówczas pytanie "co w tej sytuacji zrobi polecenie COPY?" - albo

wyświetli komunikat o błędzie i nie wykona kopiowania, albo też skopiuje plik źródłowy usuwając przy tym

zawartość istniejącego pliku docelowego - w pewnych sytuacjach obie z tych możliwości mogą okazać się nie

zadawalające. Problemy tego typu rozwiązuje się na ogół za pomocą instrukcji skoku GOTO.

Powoduje skok do miejsca oznaczonego podanego etykietą. Przy poleceniu GOTO można pominąć

dwukropek poprzedzający nazwę etykiety.

GOTO etykieta

...

:etykieta

Etykieta to inaczej mówiąc słowna nazwa linii pliku, umieszczając instrukcję etykiety nazywamy linię pliku

podaną po znaku ':' nazwą. Nazwa etykiety powinna być jednym słowem nie zawierającym odstępów (można

połączyć słowa znakiem '_') i powinna rozpoczynać się tuż za znakiem ':', nie należy rozdzielać nazwy i

znaku ':' odstępami. Podczas wykonywania pliku wsadowego interpreter pomija linie pliku zawierające

etykiety (podobnie jak ma to miejsce w przypadku polecenia komentarza REM), instrukcji tej nie wykonuje

się, służy ona jedynie do przenoszenia wykonywania pliku przez instrukcję skoku GOTO.

Wykonanie instrukcji skoku polega na przeniesieniu wykonywania pliku do tej linii w pliku, która zawiera

(jest nazwana) podaną etykietę (wpisujemy tutaj tylko nazwę etykiety, bez znaku ':').

Wróćmy teraz do przykładu usuwania pliku w poprzednim opisie (Instrukcja warunkowa (1)):

[1]

[2]

[3]

[4]

[5]

[6]

[7]

[8]

[9]

@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 ...

Zgłoś jeśli naruszono regulamin