Pliki wsadowe/Windows

Z Wikibooks, biblioteki wolnych podręczników.

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