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

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ład COMSPEC 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).