Pliki wsadowe/Windows
W systemach Windows można stosować takie pliki do tworzenia prostych programów. Ponieważ działają one głównie w trybie tekstowym do ich tworzenia wymagana jest znajomość komend MS-DOS, które nie zostaną tutaj opisane.
Hello World
[edytuj]Zaczynamy od standardowego Hello World:
@echo off
echo Hello World
pause
I uruchamiamy program dwuklikiem. Wyświetli on napis Hello World i poprosi o naciśnięcie dowolnego klawisza. Opis komend:
@echo off
- wyłączenie wyświetlania komend na ekranie.echo
- wyświetlenie tekstu. Jako argumenty podajemy tekst do wyświetlenia.pause
- oczekiwanie na naciśnięcie dowolnego klawisza.
Ze znajomością tych kilku komend możesz już pisać programy służące do robienia powtarzających się czynności, np. kopiowania plików a następnie przetwarzania ich. Jednak taki program nie jest interakcyjny, czyli nie pozostawia wyboru użytkownikowi co do jego działania.
Przyjmowanie danych
[edytuj]W trakcie działania programu
[edytuj]Zaczniemy od przyjmowania danych w oknie programu. Oto kod:
@echo off
echo Jak masz na imię?
set /p imie=
echo Witaj %imie%
pause
Uwaga!
|
Ten program zapyta nas o imię i wyświetli je. Komendy:
set /p zmienna=zacheta
- zapytanie o coś i zapisanie tego jako tzw. zmienna środowiskowa. Zmienne środowiskowe mogą być stałe, jak na przykładCOMSPEC
zawierająca ścieżkę do interpretera poleceń. Nazwy zmiennych podajemy ograniczone procentami.
Jako argumenty
[edytuj]Argumenty to dane przyjmowane w momencie uruchamiania. Możemy je wpisywać przez konsolę lub w oknie Właściwości. Są one oznaczane jako %1, %2, itd. Jeżeli uruchamiamy coś w jakimś programie, to zostanie mu to podane jako pierwszy argument i możemy to wykorzystać. Dla przykładu, oto program "cicho" usuwający uruchamiany plik:
@echo off
if exist %1 del %1
Linijka if exist %1 del %1 oznacza jeżeli istnieje %1 usuń %1 (zachowano oryginalną składnię). Jeżeli program zostanie uruchomiony bez argumentu nic się nie stanie. Więcej o instrukcjach warunkowych dowiesz się w następnym dziale.
Instrukcje warunkowe i interakcja ze środowiskiem
[edytuj]Napiszemy sobie teraz program z listą stron internetowych. Po wpisaniu numeru którejś zostanie uruchomiona przeglądarka internetowa z tą stroną. Kod:
@echo off
echo POLECANE STRONY INTERNETOWE
echo [1] - Wikibooks
echo [2] - Wikipedia
echo [3] - Pliki wsadowe w Wikibooks
echo [4] - Pliki wsadowe w Wikipedii
set /p odp=Podaj numer strony do uruchomienia?
if %odp%=="1" start "iexplore.exe http://pl.wikibooks.org"
if %odp%=="2" start "iexplore.exe http://pl.wikipedia.org"
if %odp%=="3" start "iexplore.exe http://pl.wikibooks.org/Pliki_wsadowe"
if %odp%=="4" start "iexplore.exe http://pl.wikibooks.org/Program_wsadowy"
if not %odp%=="1" exit
if not %odp%=="2" exit
if not %odp%=="3" exit
if not %odp%=="4" exit
Oczywiście możesz (no dobra, powinieneś) zmienić iexplore.exe na ścieżkę do własnej przeglądarki internetowej. Komendy:
if [not] [exist] cos==cos komenda
- jeżeli coś równa się czemuś wykonaj komendę. Jeżeli użyte jest not, stanie się przeciwieństwo - jeżeli coś nie równa się czemuś wykonaj komendę. Jeżeli użyte jest exist, zamiast zwykłego sprawdzenia warunku sprawdzane jest istnienie danego pliku (w przykładzie w poprzednim rozdziale).start
- wykonanie jakiegoś programu w osobnym oknie.call
- odmiana komendy start służąca do uruchomienia jakiegoś pliku wsadowego w tym samym oknie. Może służyć do podzielenia skomplikowanego programu na mniejsze części (tutaj niewykorzystana).
Wykorzystanie instrukcji warunkowych w celu znalezienia pliku.
if exist c:\moje\zm.txt goto 1
if not exist c:\moje\zm.txt goto 2
:1
echo Znaleziono plik.
pause >nul
exit
:2
echo Nie znaleziono pliku.
pause >nul
exit
Etykiety
[edytuj]Etykieta to narzędzie pozwalające na "skakanie" po kodzie. Wykorzystamy je do zapętlenia powyższego programu - pytanie o numer strony będzie się pojawiać dopóty, dopóki nie poda się jako numer strony litery q (od quit). Kod:
@echo off
echo POLECANE STRONY INTERNETOWE
:tekst
cls
echo [1] - Wikibooks
echo [2] - Wikipedia
echo [3] - Pliki wsadowe w Wikibooks
echo [4] - Pliki wsadowe w Wikipedii
:zapytanie
set /p odp=Podaj numer strony do uruchomienia (q aby wyjść, t aby powtórzyć strony)?
if %odp%=="q" goto wyjscie
if %odp%=="t" goto tekst
if %odp%=="1" start "iexplore.exe http://pl.wikibooks.org"
if %odp%=="2" start "iexplore.exe http://pl.wikipedia.org"
if %odp%=="3" start "iexplore.exe http://pl.wikibooks.org/Pliki_wsadowe"
if %odp%=="4" start "iexplore.exe http://pl.wikipedia.org/Program_wsadowy"
if not %odp%=="q" goto tekst
if not %odp%=="t" goto tekst
if not %odp%=="1" goto tekst
if not %odp%=="2" goto tekst
if not %odp%=="3" goto tekst
if not %odp%=="4" goto tekst
goto zapytanie
:wyjscie
Zadeklarowaliśmy sobie trzy etykiety (zaznaczone na żółto). Instrukcja goto służy do "skakania" między nimi. Po sprawdzeniu argumentu program wraca się do etykiety zapytanie. Jeżeli argumentem było q
program idzie od razu do etykiety wyjscie - program się kończy, jeżeli t
program wraca do początku i ponownie wyświetla polecane strony.
Komentarze
[edytuj]Jeżeli chcemy opisać dany fragment programu, musimy skorzystać z komendy REM lub znaku ::, czyli np:
@echo off
REM pojawi się komunikat
echo Hello World
:: wstrzymanie pracy programu
pause
Zapisywanie danych do pliku
[edytuj]Zapisywanie danych do pliku tekstowego odbywa się za pomocą symbolu > lub >> . Oto dwa przypadki:
rem Przypadek 1
set /a m=2
echo %m% >>zm.txt
pause >>nul
rem Przypadek 2
set /a m=2
echo %m% >zm.txt
pause >>nul
W przypadku pierwszym komenda set /a przyporządkowała zmiennej m cyfrę 2 a symbol >> dopisał zmienną do pliku zm.txt lub utworzył nowy gdyby nie było zm.txt.
W przypadku drugim symbol > kasował dane z pliku zm.txt i zapisał nowe lub utworzył nowy gdyby nie było zm.txt
Gdy skorzystamy z tego ułatwienia, możemy zapisać pause >nul tzn. nie będziemy widzieć "Aby kontynuować, naciśnij dowolny klawisz . . . " na ekranie konsoli.
Zakończenie
[edytuj]Teraz już potrafisz pisać proste programiki dla systemów Windows. Jeżeli zabrakło Ci jakiejś funkcji, napisz w dyskusji.
Wszystkie kody źródłowe wykorzystane w tym module dostępne są na licencji MIT (Expat).