Procedury systemowe w systemie DOS
Bibliografia:
System operacyjny MS-DOS 4.0/5.0, M. Jankowski i A. Marciniak
Windows XP. Komendy i polecenia.
Praktyczne przykłady, P. Czarny
Procedurą systemową (lub krótko procedurą) – nazywamy sekwencję poleceń systemu
operacyjnego, umieszczoną w zbiorze tekstowym i przeznaczoną do wielokrotnego wykorzystania.
Umieszczenie sekwencji
poleceń w zbiorze ma na celu uniknięcie konieczności
wielokrotnego wpisywania tych samych poleceń – oszczędność czasu i uniknięcie błędów przy wpisywaniu
Instrukcje warunkowe
Instrukcja warunkowa (if) – służy do sprawdzenia pewnego warunku i uzależnienia od niego wykonanie określonego
polecenia.
Uwaga:
W procedurachsystemowych instrukcja warunkowa ( if ) służy do sprawdzenia tylko
jednego warunku i nie wolno jej
zagnieżdżać (tzn. w obrębie jednej instrukcji if nie może kolejna
instrukcja warunkowa). Ponadto całe zdanie z instrukcją if musi mieścić się w pojedynczym wierszu.
Składnia (definicja) instrukcji warunkowej:
if warunek polecenie
lub
if not warunek polecenie
Warunki sprawdzane za pomocą instrukcji if
• identyczność dwu łańcuchów znakowych:
if %1 == ala type ala.txt
Jeśli parametr numer 1 ma postać identyczną z łańcuchem ala, to nastąpi wyświetlenie treści pliku ala.txt
if %pocz% == ola echo czesc ala
Jeśli zmienna %pocz% ma postać identyczną z łańcuchem ola, to na ekranie pojawi się napis czesc ala
if (%1) == () echo brak parametru
Jeśli parametr numer 1 jest równy łańcuchowi pustemu, to na ekranie pojawi się komunikat po słowie echo – brak parametru
if not %pocz% == ola type ala.txt
Jeśli zmienna %pocz% jest różna od łańcucha ola, to zostanie wyświetlona zawartość pliku ala.txt
Warunki sprawdzane za pomocą instrukcji if
• istnienie zbioru dyskowego o danej nazwie:
if exist %1 type %1
Jeśli istnieje zbiór o nazwie podanej parametrem numer 1, to zostanie wyświetlony na ekranie.
if not exist %1 echo brak poszukiwanego parametru
Jeśli nie istnieje zbiór o nazwie podanej parametrem numer 1, to zostanie wyświetlony napis brak poszukiwanego parametru
• testowanie wartości wskaźnika błędu errorlevel, która jest generowana przez polecenie systemowe:
if errorlevel 1 echo wystapil blad
Jeśli wartość kodu wyjściowego polecenia (wymienionego wcześniej) jest równa 1, to na ekranie pojawi się napis wystapil blad
Instrukcje warunkowe Instrukcje warunkowe
ćwiczenia
ćwiczenia
Zadanie 1
Napisz procedurę, która pliki określone pierwszym parametrem przekopiuje z katalogu danego drugim
parametrem do katalogu danego trzecim parametrem.
@echo of
if (%1) == () goto koniec if (%2) == () goto koniec if (%3) == () goto koniec copy %2\%1 %3
:koniec
Zadanie 2
Napisz procedurę, która plikowi określonemu pierwszym parametrem /w katalogu danym drugim parametrem/ zmieni nazwę na nazwę daną trzecim parametrem.
@echo of
if (%1) == () goto koniec if (%2) == () goto koniec if (%3) == () goto koniec ren %2\%1 %3
:koniec
Zadanie 3
Napisz procedurę, która zaprezentuje działanie polecenia goto. Przebieg procedury ma być różny w zależności od liczby podanych parametrów w wierszu ją wywołującym. Należy podać komunikat o maksymalnej liczbie dopuszczalnych parametrów.
@echo off
if (%1) == () goto nic if (%2) == () goto jeden if (%3) == () goto dwa
echo UWAGA: procedura akceptuje maksymalnie dwa parametry goto koniec
:dwa
echo Parametr nr 1 : %1 echo Parametr nr 2 : %2 goto koniec
:jeden
echo Parametr nr 1 : %1 echo Parametr nr 2 : -- goto koniec
:nic
echo Parametr nr 1 : -- echo Parametr nr 2 : -- :koniec
Zadanie 4 3it
Napisz procedurę, która sprawdzi istnienie pliku
określonego pierwszym parametrem i jeśli istnieje – wypisze jego zawartość
@echo of
if exist %1 type %1
Zadanie 5
Napisz procedurę, która sprawdzi, czy zmienna pocz jest równa łańcuchowi ala, jeśli tak – to zostanie wypisany napis
pocz = ala
@echo on
if %pocz% == ala echo pocz=ala
Powtarzalność Powtarzalność
procedur
procedur
Instrukcja iteracyjna (for) – jest wykorzystywana do powtarzania poleceń w procedurach systemowych.
Składnia (definicja) instrukcji iteracyjnej:
for %%zmienna in (zbiór-logiczny) do polecenie
Podczas wykonywania instrukcji for, zmienna przyjmuje kolejne wartości ze zbioru logicznego i dla każdej z tych wartości jest wykonane polecenie.
Nazwa zmiennej musi być pojedynczą literą alfabetu, a elementy zbioru powinny być łańcuchami
alfanumerycznymi, oddzielonymi odstępami /spacjami/.
Polecenie może, ale nie musi wykorzystywać aktualną wartość zmiennej.
Powtarzalność Powtarzalność procedur
procedur - ćwiczenia - ćwiczenia
Zadanie 1
Napisz procedurę systemową wydającą pięciokrotnie sygnał dźwiękowy. Dźwięk spowoduje znak sterujący [ 7 ] – Alt.
for %%a in (1 2 3 4 5) do echo [ 7 ]
Zadanie 2
Napisz procedurę systemową tworzącą dziesięć kopii pliku ala.txt zawierających tekst Ala ma kota.
echo Ala ma kota >ala.txt
for %%a in (0 1 2 3 4 5 6 7 8 9) do copy ala.txt ala%%a.txt
Zadanie 3
Napisz procedurę systemową wykonującą pętle tyle razy ile wynosi wartość parametru podanego przy wywołaniu
procedury. Jako polecenie niech pojawia się napis:
wywołanie procedury.
@echo on
if (%1) == () goto niedobrze
for %%a in (1 2 3 4 5 6 7 8 9 10) do if %%a == %1 goto razy %%a goto niedobrze :razy10
echo wywolanie procedury goto koniec
:razy9
echo wywolanie procedury goto koniec
....
:razy1
echo wywolanie procedury goto koniec
:niedobrze echo UWAGA!
echo parametrem musi być liczba calkowita od 1 do 10 :koniec
Procedury z Procedury z nieokreśloną liczbą nieokreśloną liczbą
parametrów
parametrów
Instrukcja shift – jest wykorzystywana do powtarzania
„skoku” do etykiety w celu wykonania poleceń w procedury zawartych po etykiecie, do której został wykonany skok.
parametr %0 %1 %2 %3 %4
xxx a b c d
shift xxx b c d
shift xxx c d
shift xxx d
shift xxx pusta
Procedury z Procedury z
nieokreśloną liczbą nieokreśloną liczbą
parametrów parametrów
- ćwiczenia
- ćwiczenia
Zadanie 1
Napisz procedurę systemową wypisującą na ekranie napis „Moja procedura” w ilości wierszy określonych przez parametr podany przy wywołaniu procedury.
@echo off :start
if (%1) == () goto koniec echo Moja procedura shift
goto start :koniec
Zadanie 2
Napisz procedurę systemową dopisującą do piku zad5.dat dowolne słowa podane jako parametr przy wywołaniu procedury.
@echo off : start
if (%1) == () goto koniec echo %1>>zad5.dat
shift
goto start : koniec
Zadanie 3
Napisz procedurę, która tworzy plik o nazwie podanej przez parametr i zapisuje do niego tekst podany przez kolejny
parametr.
@echo off
echo Wciśnij jakikolwiek klawisz pause>>nul
if (%1) == () goto koniec1 if (%2) == () goto koniec2 set plik=%1
:petla shift
if (%1) == () goto end echo %1>>%plik%
goto petla :koniec1
echo Nie podales nazwy pliku goto end
:koniec2
echo Za malo parametrow :end
Zadanie 4
Napisz procedurę „atrybut”, która plikowi danemu pierwszym
parametrem znajdującemu się w katalogu danym drugim parametrem nada atrybuty dane następnymi parametrami.
@echo off
if (%1) == () goto koniec if (%2) == () goto koniec set x=%1
set y=%2 shift
shift :start
if (%1) == () goto koniec attrib +%1 %y%\%x%
shift
goto start : koniec
Zadanie 5
Napisz procedurę „kasuj”, która kasuje pliki dane parametrami procedury znajdujące się w katalogu ALA na dysku A:
@echo :start
if (%1) == goto koniec del C:\ALA\%1
shift
goto start :koniec
Zadanie 6
Napisz procedurę „dopisz”, która sprawdza istnienie pliku danego pierwszym parametrem w katalogu danym drugim parametrem. Jeżeli plik istnieje dopisuje do niego pozostałe parametry procedury, a jeżeli nie istnieje tworzy go i
dopisuje do niego pozostałe parametry procedury.
@echo off
if (%1) == () goto koniec if (%2) == () goto koniec set x=%1
set y=%2 shift
shift
if exist c:\%y%\%x% goto start : start
if (%1) == () goto koniec echo %1 >>c:\%y%\%x%
shift
goto start : koniec
Procedury systemowe Procedury systemowe
– zadania różne
– zadania różne
Napisz procedurę „plik”, która wyświetli zawartość pliku danego pierwszym parametrem z katalogu danego drugim parametrem.
Zadanie 1
Zadanie 2
Napisz procedurę „atrybuty”, która wyświetli atrybuty plików danych pierwszym parametrem z katalogu danego drugim parametrem.
Zadanie 3
Napisz procedurę, która kopiuje pliki dane pierwszym
parametrem z katalogów danych pozostałymi parametrami do katalogu MOJ na dysku C.
Napisz procedurę, która z katalogu będącego pierwszym parametrem przekopiuje do katalogu będącego drugim parametrem pliki określone następnymi parametrami.
Zadanie 4
Zadanie 5
Napisz procedurę, która utworzy na dysku katalog roboczy, a w nim zapisze dane parametrami procedury.
Zadanie 6
Napisz procedurę ,która dopisze do pliku cos.txt wszystkie parametry tej procedury.
Utwórz plik wsadowy dopisujący do pliku imie.txt nazwisko po wybraniu opcjonalnie klawisza (A) lub zakończy
procedurę po wybraniu klawisza (B).
Zadanie 7
Zadanie 1
Napisz procedurę „plik”, która wyświetli zawartość pliku danego pierwszym parametrem z katalogu danego drugim parametrem.
@echo off
if (%1) == () goto koniec if (%2) == () goto koniec type %2\%1
: koniec
Zadanie 2
Napisz procedurę „atrybuty”, która wyświetli atrybuty plików danych pierwszym parametrem z katalogu danego drugim parametrem.
@echo off
if (%1) == () goto koniec if (%2) == () goto koniec attrib %2\%1
: koniec
Zadanie 3
Napisz procedurę, która kopiuje pliki dane pierwszym
parametrem z katalogów danych pozostałymi parametrami do katalogu MOJ na dysku C.
@echo off
if (%1) == () goto koniec set plik=%1
shift : start
if (%1) == () goto koniec copy %1\%plik% C:\ MOJ shift
goto start : koniec
Zadanie 4
Napisz procedurę, która z katalogu będącego pierwszym parametrem przekopiuje do katalogu będącego drugim parametrem pliki określone następnymi parametrami.
@echo off
if (%1) == () goto koniec if (%2) == () goto koniec
set kat1(dowolne) x/=%1 (podstawia za kat1 %1) set kat2 = %2
shift shift : start
if (%1) == () goto koniec copy %kat1%\%1 %kat2%
---co--- --gdzie—
shift
goto start : koniec
Zadanie 5
Napisz procedurę, która utworzy na dysku katalog roboczy, a w nim zapisze dane parametrami procedury.
@echo off
md c:\roboczy : start
if (%1) == () goto koniec md c:\roboczy\%1
shift
goto start
: koniec
Zadanie 6
Napisz procedurę ,która dopisze do pliku cos.txt wszystkie parametry tej procedury.
:start
if (%1) == ( ) goto koniec echo %1>>C:\cos.txt
shift
goto start
:koniec
Zadanie 7
Utwórz plik wsadowy dopisujący do pliku imie.txt nazwisko po wybraniu opcjonalnie klawisza (A) lub zakończy
procedurę po wybraniu klawisza (B)
@echo off
echo a dopisz nazwisko echo b koniec procedury
choice / c: a – lub+/ wybierz klawiszy a,b if errorlevel == b goto k
if errorlevel == a goto d :d
echo (nazwisko)>>imię.txt :k
echo koniec