Budowa pliku wsadowego 1, technik informatyk, soisk utk


Budowa pliku wsadowego

Plik wsadowy jest to zwykły plik tekstowy zawierający rozszerzenie .bat. Wewnątrz takiego pliku znajdują się instrukcje, które są poleceniami systemu i generalnie umożliwiają wykonanie jakiejś czynności. Polecenia wewnątrz pliku wsadowego muszą być umieszczane każda w osobnej linii. 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 przykład prostego pliku wsadowego

REM Plik Przykład.bat
ECHO Blablablabla
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

Korzystając z plików wsadowych, zwanych również programami wsadowymi lub skryptami, można uprościć rutynowe lub wielokrotnie wykonywane zadania. Plik wsadowy jest niesformatowanym plikiem tekstowym zawierającym jedno lub więcej poleceń. Gdy nazwa pliku zostanie wpisana w wierszu polecenia, program Cmd.exe wykonuje kolejne polecenia w pliku.

Termin program wsadowy oznacza: plik ASCII (tekst niesformatowany), który zawiera jedno lub kilka poleceń systemu operacyjnego. Nazwa pliku wsadowego ma rozszerzenie cmd lub bat. Kiedy nazwa pliku zostaje wpisana w wierszu polecenia lub kiedy program wsadowy zostaje uruchomiony z innego komputera, polecenia programu wsadowego są przetwarzane sekwencyjnie. Programy wsadowe są również określane jako pliki wsadowe.

Termin skrypt oznacza: typ programu składający się z listy rozkazów aplikacji lub programu. Skrypt najczęściej wyraża polecenia przy użyciu reguł i składni aplikacji lub narzędzia oraz prostych struktur sterujących, takich jak pętle i wyrażenia warunkowe typu if/then.

W pliku wsadowym można umieścić dowolne polecenia. Określone polecenia, takie jak for, goto i if, umożliwiają warunkowe przetwarzanie poleceń w pliku wsadowym.

Pliki wsadowe uruchamia się tak jak zwykłe pliki wykonywalne z rozszerzeniem .exe. Mogą one również posiadać argumenty przekazywane do wnętrza pliku. Argumenty te podajemy po nazwie takiego pliku np. aby przekazać plikowi wsadowemu argumenty arg1 i arg2 wystarczy napisać:

C:\>przyklad.bat arg1 arg2

Zmienne

Pliki wsadowe mogą zawierać zmienne. Zmienne definiujemy używając polecenia Set np.

Składnia

set [[/a [wyrażenie]] [/p [zmienna=]] ciąg]

Parametry

/a
Ustawia parametr ci
ąg jako wyrażenie numeryczne, które jest obliczane.

/p
Ustawia warto
ść parametru zmienna jako wiersz danych wejściowych.

zmienna
Okre
śla zmienną, którą należy ustawić lub zmodyfikować.

ci
ąg
Okre
śla ciąg, który należy skojarzyć z określoną zmienną.

Set zmienna=10

Polecenie set użyte bez żadnych parametrów powoduje wyświetlenie bieżących ustawień zmiennych środowiskowych. Odwołanie się do zmiennej następuje poprzez otoczenie jej nazwy znakami % np. %zmienna%

Korzystanie z parametru /a

Poniżej podano listę operatorów obsługiwanych parametru /a uporządkowanych zgodnie z malejącą kolejnością pierwszeństwa.

< > Grupowanie
* / % + - Arytmetyka
<< >> Przesunięcie logiczne
& Bitowa operacja iloczynu (AND)
^ Bitowa operacja LUB wykluczającego (exclusive OR)
| Bitowa operacja LUB (OR)
= *= /= %= += -= &= ^= |= <<= >>= Przypisanie
, Separator wyrażeń

Jeżeli używane są operatory logiczne (&& ||) lub modułowe (%), należy wpisać ciąg wyrażenia w cudzysłowach. Wszystkie ciągi inne niż ciągi numeryczne w wyrażeniu są traktowane jako nazwy zmiennych środowiskowych, których wartości są konwertowane na liczby przed przetwarzaniem. Jeżeli określono nazwę zmiennej środowiskowej, które nie jest zdefiniowana w bieżącym środowisku, przydzielana jest wartość równa zero, która umożliwia wykonywanie operacji arytmetycznych przy użyciu wartości zmiennych środowiskowych bez używania symbolu % do pobierania wartości.

Jeżeli polecenie set /a jest wykonywane z wiersza polecenia poza skryptem poleceń, wyświetlana jest końcowa wartość wyrażenia.

Wartości numeryczne są liczbami dziesiętnymi, jeżeli nie są poprzedzone prefiksem w przypadku liczb szesnastkowych lub 0 w przypadku liczb ósemkowych. Wartość 0×12 jest więc równa wartości 18 i 022. Zapis ósemkowy może być niejednoznaczny. Na przykład 08 i 09 nie są prawidłowymi liczbami, ponieważ 8 i 9 nie są prawidłowymi cyframi ósemkowymi.

C:\Set z = 10
C:\Set /A z = %z% + 1 // zwi
ększenie z o 1

Polecenia Setlocal i Endlocal są używane do ograniczenia zasięgu lokalnych zmiennych w skryptach.

Polecenie Setlocal włącza lokalizację zmiennych środowiskowych w pliku wsadowym. Lokalizacja trwa aż do chwili, kiedy w pliku wsadowym zostanie wykonane odpowiednie polecenie endlocal lub zostanie osiągnięty koniec pliku wsadowego.

Składnia

setlocal {enableextension | disableextensions} {enabledelayedexpansion | disabledelayedexpansion}

Argumenty

enableextension
Włącza rozszerzenia poleceń aż do chwili, kiedy zostanie wykonane odpowiednie polecenie endlocal, niezależnie od ustawienia obowiązującego przed wykonaniem polecenia setlocal.

disableextensions
Wyłącza rozszerzenia poleceń aż do chwili, kiedy zostanie wykonane odpowiednie polecenie endlocal, niezależnie od ustawienia obowiązującego przed wykonaniem polecenia setlocal.

enabledelayedexpansion
Włącza opóźnione rozszerzanie zmiennych środowiskowych aż do chwili, kiedy zostanie wykonane odpowiednie polecenie endlocal, niezależnie od ustawienia obowiązującego przed wykonaniem polecenia setlocal.

Polecenie endlocal kończy lokalizację zmian środowiska w pliku wsadowym, przywracając wartości zmiennych środowiskowych ustawione przed wykonaniem odpowiedniego polecenia setlocal.

Instrukcje

Instrukcja ECHO

Jest to jedna z podstawowych instrukcji. Służy do wypisywania tekstu na ekranie np. plik wsadowy, który zawiera taką intrukcję:

po uruchomieniu wypisze na ekran tekst BlaBlaBla. Jeśli gdzieś zostanie użyta instrukcja Echo on to od tego momentu na ekranie zaczną się pojawiać wszystkie instrukcje zawarte w pliku wsadowym oraz wynik ich działania. Anulowanie tego następuje poprzez wydanie polecenia Echo off. Drugim sposobem wyelminowania wypisywania wszystkich instrukcji na ekran jest umieszczenie znaku @ na początku linii. Linie które go zawierają nie zostaną wyświetlone np.

Echo on
Rem to jest test z echo on
Echo Tralala
@Echo Test z malpa
Echo off
Rem to jest test z echo off
Echo To ju
ż koniec testów

Po uruchomieniu takiego pliku wsadowego na ekranie pojawi się

C:\>Echo on
C:\> Rem to jest test z echo on
C:\>Echo Tralala
Tralala
Test z malpa
C:\>Echo off
To ju
ż koniec testów

Domyślnie instrukcja Echo jest ustawiona na on.

Instrukcja SHIFT

Instrukcja ta służy do przesuwania kolejności argumentów przekazywanych do wnętrza pliku wsadowego. Jeżeli shift zostanie użyta bez żadnych opcji to wszystkie argumenty zostaną przesunięte o jedną pozycję w lewo tj. drugiemu argumentowi będzie odpowiadało %1, trzeciemu %2 itd. Niestety po wywołaniu instrukcji shift pierwszy argument jest bezpowrotnie tracony i nie ma już możliwości jego wywołania.Jeżeli zastosowano poleceni shift /7 to przesuwanie argumentów rozpocznie się dopiero od argumentu siódmego, pozostawiając wcześniejsze bez zmian np. mając plik wsadowy przyklad.bat o treści

@Echo off
Echo %1 %2 %3 %4 %5 %6 %7
Shift
Echo %1 %2 %3 %4 %5 %6 %7
Shift /3
Echo %1 %2 %3 %4 %5 %6 %7

Uruchamiając ten plik z argumentami przykład.bat 1 2 3 4 5 6 7 8 9 na ekranie pojawi się:

1234567
2345678
2 3 5 6 7 8 9

Argumenty mogą zostać poddane modyfikacji poprzez umieszczenie stosownego modyfikatora pomiędzy znakiem %, a numerem argumentu np. %~f6

Lista modyfikatorów

%~f Pełna ścieżka
%~d Tylko litera dysku
%~p Tylko katalog
%~n Tylko nazwa pliku
%~x Tylko rozszer
zenie pliku
%~s Nazwy w formacie 8.3 zamiast d
ługich nazw ścieżek
% ~$PATH:n Sprawdzanie
ścieżki poszukiwań w zmiennej środowiskowej PATH i zwracanie pełnej ścieżki dla pasującego polecenia podanego jako argument n oraz zwracanie pustego ciągu znaków, jeżeli element nie zostanie znaleziony.

Po uruchomieniu poniższego skryptu o nazwie f.bat

@echo off
echo %~f0
echo %~d0
echo %~p0
echo %~n0
echo %~x0
echo %~s0

Na ekranie pojawi się:

C:\Documents and Settings\mmn\f.bat
C:
\Documents and Settings\mmn\

f
.bat
C:\DOCUME~1\mmn\f.bat

Instrukcja skoku GOTO

Instrukcja ta powoduje przeskok wykonywania pliku do tej linii która zawiera etykietę podaną po instrukcji goto np.

Echo Przykładowy tekst
Goto etykieta
Echo Przykladowy tekst 2
:etykieta
Echo Prz
ykładowy tekst 3

Po wykonaniu tego pliku przykładowy tekst 2 się nie wyświetli

Instrukcja CALL

W pliku wsadowym można używać dowolnych poleceń systemu oraz wywoływać pliki wykonywalne np. exe. Nie da się jednak bezpośrednio wywołać innego pliku wsadowego (tzn. że nazwa pliku wsadowego nie może być używana jak polecenie wewnątrz takiego pliku). Uruchomienie innego pliku wsadowego następuje poprzez wydanie polecenia CALL plik_wsadowy [argumenty]. Po wykonaniu wywołanego pliku sterowanie wraca do macierzystego pliku.

Składnia

call [[dysk:][ścieżka] nazwa_pliku [parametry_wsadowe]] [:etykieta [argumenty]]

Parametry

[dysk:][ścieżka] nazwa_pliku
Okre
śla lokalizację i nazwę wywoływanego programu wsadowego. Parametr nazwa_pliku musi mieć rozszerzenie nazwy bat lub cmd.

[parametry_wsadowe]
Okre
śla wszystkie informacje w wierszu polecenia wymagane przez program wsadowy, włącznie z opcjami wiersza polecenia, nazwami plików, parametrami wsadowymi (tzn. od %0 do %9) lub zmiennymi (na przykład %baud%).

:etykieta
Ok
reśla etykietę, do której należy przekazać sterowanie w programie wsadowym. Korzystając z polecenia call z tym parametrem, można utworzyć nowy kontekst pliku wsadowego i przekazać sterowanie do instrukcji znajdującej się po określonej etykiecie. Gdy koniec pliku zostanie osiągnięty pierwszy raz (tzn. po skoku do etykiety), sterowanie jest ponownie przekazywane do instrukcji znajdującej się po instrukcji call. Gdy koniec pliku wsadowego zostanie osiągnięty po raz drugi, wykonywanie skryptu wsadowego zostanie zakończone.

argumenty
Okre
śla informacje w wierszu polecenia przekazywane do nowego wystąpienia programu wsadowego rozpoczynającego się od punktu oznaczonego jako :etykieta, włącznie z opcjami wiersza polecenia, nazwami plików, parametrami wsadowymi (tzn. od %1 do %9) lub zmiennymi (na przykład %baud%).

Instrukcja warunkowa IF

Plik wsadowy, tak jak każdy "porządny" program może zostać zaopatrzony w coś, co pozwala mu w pewnych warunkach podejmować pewne decyzje. To coś to oczywiście instrukcja warunkowa if. Sprawia ona, że plik wsadowy może reagować na warunki w jakich pracuje. Może np. zdecydować co ma teraz wyświetlić na ekranie, czy zakończyć swoje działanie, czy zareagować na wciśnięcie klawisza na klawiaturze itd. Jeśli warunek po instrukcji if jest prawdziwy, zostanie on wykonany, jeśli nie zostanie zignorowany. Instrukcja warunkowa może występować w kilku postaciach.

Kiedy program kończy swoje działanie, ma on możliwość poinformowania systemu operacyjnego o stanie swojego działania. To znaczy, może powiedzieć mu czy podczas wykonywania nie powstały żadne błędy. Przekazana informacja może mieć postać całkowitej liczby dodatniej. Ta liczba to tzw. kod wynikowy programu. Jeżeli cała operacja przebiegła sprawnie to kod wynikowy powinien być równy zero. Programista może zdefiniować poziom kodu wynikowego, po przekroczeniu którego(lub zrównaniu się) warunek stanie prawdziwy i zostanie wykonana komenda. Kod błedu jest przechowywany w zmiennej %Errorlevel%.

Sprawdza czy dwa napisy są sobie równe. Jeżeli zawierają spacje lub są nazwami zmiennych muszą być otoczone cudzysłowiem.

Sprawdza czy istnieje podany plik. Można zamiast nazwy pliku podać pełną ścieżkę lub wzorzec nazw.

Porównuje napisy albo liczby. Dostępne operatory:

EQU -równość
NEQ -negacja
LSS -pierwszy ci
ąg znaków jest leksykalnie mniejszy od drugiego
LEQ -pierwszy ci
ąg znaków jest leksykalnie mniejszy lub równy drugiemu
GTR -pierwszy ci
ąg znaków jest leksykalnie większy od drugiego
GEQ -pierwszy ci
ąg znaków jest leksykalnie większy lub równy drugiemu
/I -oznacza
że wielkość liter nie jest uwzględniana

Instrukcja iteracyjna FOR

Instrukcja ta służy do wielokrotnego powtarzania jednej czynności. Jej składnia może mieć wiele różnych postaci np.


gdzie x jest jest jakąś zmienną która będzie przybierała kolejno wartości z listy. Dla każdego takiego przyporządkowania nastąpi wykonanie komendy np. for %f in (*.doc *.txt) do type %f

Wyświetli zawartość wszystkich plików z rozszerzeniami nazwy .doc lub .txt w bieżącym katalogu przy użyciu zmiennej %f
W tym przykładzie każdy plik w bieżącym katalogu, który ma rozszerzenie nazwy .doc lub .txt, jest podstawiany za zmienną %f aż do chwili, gdy zostanie wyświetlona zawartość wszystkich plików. Aby użyć tego polecenia w pliku wsadowym, należy zamienić każde wystąpienie zmiennej %f na zmienną %%f. W przeciwnym przypadku zmienna jest ignorowana i wyświetlany jest komunikat o błędzie.


W tym przypadku na ekranie zostanie trzykrotnie wyświetlony napis BlaBla.

Inną postacią pętli for jest


Która działa podobnie do wersji znanej z języka C. Zmienna X jest inicjowana przez parametr start, który jest zwiększany o skok. Pętla kończy działanie gdy zmienna X przekroczy parametr koniec np.

Echo off
FOR /L %%1 IN (1,2,100) DO Echo Windows 2000

Na ekranie 50 razy pojawi się napis Windows 2000

Polecenie PATH

PATH dysk:\ścieżka dostępu

Wyświetla lub ustawia ścieżkę dla plików wykonywalnych. Aby wyczyścić ustawienie ścieżki przeszukiwania i wybrać do przeszukiwania jedynie bieżący katalog, wpisz PATH:, Aby wyświetlić bieżącą ścieżkę, trzeba wpisać

PATH SET [zmienna = [ciąg]]

Wyświetla, ustawia lub usuwa zmienne środowiskowe systemu MS-DOS (zmienna - określa nazwę zmiennej środowiskowej; ciąg - określa serię znaków, które mają być przypisane do zmiennej).

Polecenie PROMPT

PROMPT [tekst]

Zmienia znak zgłoszenia systemu MS-DOS. Tekst określa nowy znak zgłoszenia, który można zbudować z normalnych znaków oraz następujących znaków specjalnych:

$Q = (znak równości)
$$ $ (symbol dolara)
$T Bie
żąca godzina
$D Bie
żąca data
$P B
ieżący dysk i ścieżka
$V Numer wersji systemu Windows
$N Bie
żący dysk
$G > (znak wi
ększości)
$L < (znak mniejszo
ści)
$B | (potok)
$H Cofacz (usuwa poprzedni znak)
$E Kod escape (kod ASCII 27)
$_ Powrót karetki i znak wysuwu wiersza

Aby przywrócić domyślne ustawienie znaku zgłoszenia, wpisz PROMPT.

Polecenie PAUSE

Wstrzymuje wykonywanie programu wsadowego w oczekiwaniu naciśnięcia przez użytkownika dowolnego klawisza. Jeśli w poleceniu podano komunikat, to jest on wypisywany przed wypisanie, zachęty do naciśnięcia klawisza. Zwykle polecenie to jest umieszczane w programie wsadowym w miejscu, gdzie powinna nastąpić pewna akcja użytkownika (wymiana dyskietki, uruchomienie drukarki, zmiana papieru itp.). Jest ona ponadto poprzedzona kilkoma poleceniami echo, wypisującymi dodatkowe instrukcje.

PAUSE {komunikat}
PAUSE Naci
śnij dowolny klawisz, gdy bedziesz gotowy:

Polecenie wstrzymuje program czekając zgłoszenie gotowości przez użytkownika.

Polecenie REM

Polecenie REM służy do umieszczania komentarzy wewnątrz pliku wsadowego. Tekst znajdujący się po słowie REM jest ignorowany przez interpretator poleceń. Składnia:

REM [komentarz]
komentarz - dowolny tekst (zazwyczaj opis dzia
łania danych komend)

Polecenie LOADHIGH

Aby załdować program do obszaru pamięci wyższej korzystamy z polecenia: LOADHIGH dysk:\ścieżka_dostępu\ nazwa_pliku parametry

Jeżeli natomiast wpiszemy samą ścieżkę dostępu np. C:\dos\mouse.com to plik wsadowy podczas działania uruchomi program mouse.com z podanego katalogu.

LOADHIGH [dysk:][ścieżka]nazwapliku [parametry]
LOADHIGH [/L:obszar1[,rozmin1][;obszar2[,rozmin2]...] [/S]] [dysk:][
ścieżka]nazwapliku [parametry]

/L:obszar1[,rozmin1][;obszar2[,rozmin2]]... - okre
śla obszar(y) pamięci, do których ma być ładowany program;
obszar1 - okre
śla numer pierwszego obszaru pamięci;
rozmin1 - okre
śla obszar minimalny, jeżeli jest, dla obszaru1;
obszar2 i rozmin2 - okre
śla numer i minimalny rozmiar drugiego obszaru (można podać dowolną liczbę obszarów);

/S - zmniejsza pami
ęć UMB do rozmiaru minimalnego podczas ładowania programu; [dysk:][ścieżka]nazwapliku - określa lokalizację i nazwę programu.

W plikach wsadowych wykorzystywanych w Windows 2000 jesteśmy oczywiście w stanie korzystać z jego poleceń sieciowych czyli rodziny poleceń net , polecenia at , polecenia start a także możliwe jest korzystanie z zasad warunkowego przetwarzania poleceń:

|| - warunkowe wykonanie polecenia drugie polecenie wykona się tylko wtedy gdy pierwsze się nie uda

Znak
^ - oznacza przeniesienie polecenia. Może być stosowany w skryptach do poleceń zajmujących więcej, niż jeden wiersz.

& - łączy wiele poleceń, logiczna operacja AND

&& warunkowe wykonanie polecenia - drugie polecenie jest wykonywane tylko wtedy gdy pierwsze zakończy się poprawnie

( ) grupuje kilka poleceń

; lub , - oddziela parametry, dostarczając je poleceniu pojedyńczo

Potoki i strumienie

STRUMIEŃ (z angielskiego stream)

Strumień jest to pewnego rodzaju "połączenie" między "nadawcą a odbiorcą" lub "odbiorcą i nadawcą" o wyglądzie nieprzerwanego ciągu danych, celowo nie dzielonego na komunikaty.

Do otoczenia każdego procesu należą trzy strumienie, utożsamiane z pewnymi plikami lub urządzeniami: wejściowy, wynikowy i diagnostyczny.

Strumień wejściowy służy min. do czytania poleceń, parametrów itp. Do strumienia wynikowego zapisywane są wyniki działań różnych programów. Natomiast do strumienia diagnostycznego kierowane są informacje o błędach. Na ogół wszystkie te trzy strumienie odpowiadają konsoli (tworzą ją monitor i klawiatura ). Można to jednak zmienić przy pomocy trzech znaków: >, >>, <. Ich zadaniem jest kierowanie danych w inne miejsca niż standardowe (monitor, klawiatura). Przykładowo dane wejściowe można skierować do zbioru na dysku, drukarki.

Oczywiście możemy modyfikować opcje strumienii poprzez zagnieżdżenie pewnych atrybutów.
Często zdarza się ,że zawartość plików dla uzyskania bardziej widocznych rezultatów trzeba posortować. Do tego celu służy np: opcja
"SORT"

"sort<"bb.txt">nowy.txt"

efektem działania wpisanej instrukcji "nieuporządkowany" plik bb.txt zamieni sie na posortowany plik o nazwie nowy.txt.
Sortowanie również możemy określić np: Od najmniejszej do najwiekszej liczby lub wedlug alfabetu, jest wiele opcji ,ale o tym szerzej w przykładach dla przetwarzania potokowego.

Charakter standardowego wejścia i wyjścia wyraża się następująco:

Korzyść z tego przyporządkowania (przypisania urządzenia lub pliku do strumienia) polega na tym, że program korzystający ze standardowego we/wy staje się programem uniwersalnym. Bez konieczności dokonywania zmian programu można w chwili wywołania przekazać mu dane z dowolnego pliku lub urządzenia albo skierować wyniki do dowolnego miejsca.

Różnica pomiędzy znakiem > a >> jest taka, że w pierwszym przypadku istniejące dane w pliku zostaną skasowane, a w drugim przypadku dane zostaną dopisane na koniec już istniejących.
Gdy chcemy np. wysłać dane do drukarki to w poleceniu nie możemy użyć słowa "drukarka", gdyż komputer nie będzie nas rozumiał. Należy posłużyć się w takim wypadku specjalnymi symbolami, które określają nam rodzaj urządzenia. I tak np.:

* złącza szeregowe to COM1 do COM4;
* synonim nazw
y COM1 to AUX;
* z
łącza równoległe to LPT1 do LPT3;
* drukarka to
PRN;
* urz
ądzenie puste to NULL (Jest to urządzenie logiczne, któremu nie odpowiada żadne urządzenie fizyczne. W systemie operacyjnym pełni on rolę "śmietnika systemowego", do którego można kierować niepotrzebne dane wyjściowe.)

Możliwości sterowania strumieniami danych można zastosować do:

* wysyłania krótkich napisów i komunikatów na drukarkę;
* zapisywania krótkich tekstów (wprowadzonych z klawiatury) bezpo
średnio w zbiorze dyskowym;
* blokowania napisów generowanych przez polecenie systemowe;
* wysy
łania danych generowanych przez niektóre polecenia do drukarki lub zb. dyskowego.

POTOK (z angielskiego pipe lub pipeline)

Potok jest to pewien sposób na komunikacje, umożliwiający jednokierunkowy przepływ danych, informacji miedzy adresowanymi(skojarzonymi) procesami. Zjawisko potoku odbywa się na zasadzie strumienia, jest niezawodne i kontrolowane.
Symbolem potoku zwyczajowo przyjęto pojedynczą pionową kreskę ("|").


Typowe polecenie A | B tworzy potok ,"nić transfuzyjną" miedzy programem A a programem B, łącząc standardowe wyjście programu A ze standardowym wejściem programu B.

Przetwarzanie potokowe (z angielskiego pipelining)

Istnieją dwie równie dobre definicje określające wyżej wymienione "zjawisko".

Pierwsza z nich mówi, że przetwarzanie potokowe jest równoległym działaniem w poszczególnych fazach danego cyklu rozkazowego. Któryś z układów procesora potokowego wykonuje jakiś rozkaz, gdy kolejny niezależny układ tego procesora w równoległym czasie pobiera następny rozkaz umieszczony w pamięci operacyjnej, co znacznie podwyższa wydajność procesora. "Stopień równoległości konstrukcji procesorów wynosi od trzech do siedmiu niezależnych bloków funkcjonalnych wykonujących jednocześnie pobranie rozkazu, jego zdekodowanie, obliczenie adresu argumentu, pobranie argumentu, wykonanie operacji i przechowanie wyniku".

Kolejną wcześniej wspomnianą definicją przetwarzania jest ciąg lub szereg procesów w systemie UNIX lub unikspochodnym, których wejścia i wyjścia są połączone w ten sposób, ze wyniki jednego procesu są automatycznie kierowane (akumulowane) na wejście następnego w kolejce procesu.

Owe przetwarzanie polega miedzy innymi na skierowaniu strumienia danych "wyjściowych" jednego polecenia do innego w postaci strumienia danych wejściowych .

Przesłanie standardowego wyjścia instrukcji 1 jako standardowego wejścia dla instrukcji 1, przykładem tego może być takie proste sformułowanie:

"instrukcja 1 | instrukcja 2"

Można wyróżnić trzy podstawowe polecenia-instrukcje w przetwarzaniu potokowym:

np: sort [/r] [/+n]<"ag.txt">nowy.txt

gdzie:



Składowe polecenia find:
find wyszukuje znak lub ciąg znaków w pliku oraz plikach. Po dokonanych pomyślnie operacjach , find wyświetla wszystkie wiersze zawierające szukany ciąg znaków lub znak.
find [ / v ] [ / c ] [ / n ] [ / i ] "ciag=znak" [ [dysk:] [scieżka] nazwa_pliku[...] ]

PARAMETRY:


Przykład : type PROG.PAS | find /n "Pisz" - poprzedzone numerami wiersze zawierające ciąg znaków Pisz ( w zbiorze PROG.PAS )

Najprostszym przykładem przetwarzania potokowego jest zastosowanie polecenia sort do ustawienia w kolejności alfabetycznej listy zawartości skorowidza dyskowego . W tym przypadku polecenie sort pobiera dane wejściowe ze strumienia danych wyjściowych polecenia dir i przekazuje swoje dane wyjściowe do standardowego urządzenia wyjściowego , tj. na ekran monitora . Zapis tej operacji jest następujący : dir /b | sort <"Enter">

Filtr more w przetwarzaniu potokowym

Polecenie more służy do dzielenia na strony (ekrany) dłuższych zbiorów tekstowych lub dużej liczby wierszy danych wyjściowych innego polecenia kierowanych na ekran. Polecenie more używane jest jednak najczęściej jako filtr pobierający dane wejściowe ze strumienia wyjściowego innego polecenia .
Przykład:
Jeśli zbiór TEKST znajdujący się w katalogu głównym dyskietki umieszczonej w napędzie A , jest obszerny (liczba wierszy tekstu przekracza liczbę wierszy ekranu) to po wykonaniu polecenia type A:\TEKST

na ekranie pozostałaby jedynie końcowa część. Zastosowanie filtru more tj. wprowadzenie polecenia type A:\TEKST | more

spowoduje , że po zapełnieniu jednego ekranu wyświetlanie zostanie wstrzymane do chwili naciśnięcia przez użytkownika dowolnego klawisza ( wykonywanie polecenia może być przerwane w dowolnej chwili przez wciśnięcie klawiszy Ctrl-C).

Przykład:
Wprowadzenie polecenia dir | more
spowoduje podobnie jak polecenie dir z parametrem /p , wyświetlenie listy zawartości bieżącego katalogu ze stronicowaniem . Różnica polega na tym , że polecenie dir z parametrem /p działa natychmiast , natomiast polecenie dir z filtrem more powoduje najpierw wczytanie polecenia more do pamięci (jest to polecenie zewnętrzne ), następnie przetworzenie utworzonego zbioru tymczasowego (w sposób niewidoczny dla użytkownika ) , a dopiero potem wyświetlenie strumienia wyjściowego na e
kranie .

Filtr sort w przetwarzaniu potokowym.

Polecenie sort umożliwia sortowanie danych nie tylko względem pierwszego znaku każdego wiersza , ale także względem n-tego znaku . Do określenia tego znaku , tj. pozycji począwszy od której należy uwzględnić znaki podczas sortowania , służy parametr /+n . Polecenie sort bez tego parametru jest równoważne poleceniu sort/+1 . Za pomocą tego polecenia możemy posortować skorowidz według różnych kryteriów. Przykład: Wprowadzenie polecenia

dir | sort <"Enter"> spowoduje wyświetlenie listy zawartości katalogu bieżącego posortowanej według dat utworzenia zbiorów , a polecenia

dir | sort/+12 <"Enter"> posortowania według godziny powstania zbiorów (począwszy od godziny 00:00)

Przykłady

Przykładowe skrypty w Windows 2000:

  1. Chcąc sobie odrobinę skomplikować wyświelanie zawartości bieżącego folderu zakładamy, że chcemy by skrypt wyświetlił nam tylko pliki o rozszerzeniach .bat i .cmd. Wykorzystamy do tego celu instrukcję For w poniższej postaci. Dodatkowo wyniki wyszukiwania wyślemy do pliku wy.txt

for %%f in (*.cmd *.bat) do dir /b %%f >> wy.txt

Po uruchomieniu skryptu widzimy efekty jego działania w wierszu poleceń, a tego chcielibyśmy uniknąć. Modyfikujemy więc nasz skrypt dodając linie: @echo off na jego początku. Znak @ oznacza, że również i samo polecenie echo off nie będzie widoczne. Ponieważ użyliśmy symbolu >> przy przekierowaniu do pliku, to za każdym razem nasz plik wyjściowy jest zwiększany o następne dane. Jeżeli chcemy tego uniknąć, możemy sprawdzać na początku czy istnieje taki plik, a jeżeli tak to najpierw go usuniemy. Zrealizujemy to instrukcją If exist wy.txt del /P wy.txt. Przełącznik /P wymusza monitowanie o potwierdzenie usnięcia pliku. Teraz nasz skrypt wygląda następująco:

@echo off
If exist wy.tx
t del /P wy.txt
for %%f in (*.cmd *.bat) do dir /b %%f >> wy.txt

Teraz dodamy odrobinę interakcji, tzn. sami będziemy określać do jakiego pliku będziemy zapisywać wyniki. Realizujemy to zmieniając nazwę pliku - wy.txt nazwą argumentu z jakim będziemy wywoływać skrypt: %1.

@echo off
If exist %1 del /P %1
for %%f in (*.cmd *.bat) do dir /b %%f >> %1

Na koniec wykorzystamy możliwości przetwarzania potokowego. Otóż nasz plik wyjściowy posortujemy według kolejności alfabetycznej i zapiszemy go do następnego pliku, którego nazwę podamy jako drugi argument. Realizujemy to za pomocą poleceń more i sort. Dodajmy jeszcze komunikat informujący o tym, że wszystko przebiegło pomyślnie:

@echo off
If exist %1 del /P %1
for %%f in (*.cmd *.bat) do dir /b %%f >> %1
mor
e %1 | sort >%2
echo Opreacje przebieg
ły pomyślnie!!!
pause

II. W tym przykładzie chcemy by w przypadku braku pliku który chcielibyśmy odczytać, nie wyświetlił się standardowy komunikat o błędzie, a zamiast niego mógł się wyświetlić nasz. Można to zrealizować w następujący sposób:

@echo off
more %1 2> NUL
if Errorlevel 0 echo niestety, ale podany plik: "%1" nie zosta
ł odnaleziony


W drugiej lini skryptu komunikat o ewentualnym błędzie zostanie przekierowany do NUL czyli do zbioru pustego, co uniemożliwi wyświetlenie go na ekranie. W następnej lini jest użyty wariant instrukcji If gdzie komenda echo się wykona jeżeli poprzednie polecenie - w tym przypadku more kod błędu wiekszy niż 0.

III. Następny przykład:

rem przykład III
@echo off
echo echo wszyst
ko sie udalo! > %2.bat

dir c:\*.txt /s /b | find "readme" | sort /+1 > %1
call %2

date /t
date /t >> %1

echo koniec poszukiwan

W trzeciej lini zapisujemy nasz komunikat, który stanie się plikiem wsadowym o nazwie podanej jako drugi argument. Następnie komenda dir wyświetli wszystkie pliki o rozszerzeniu .txt na dysku C i wynik swojego działania wyśle do polecenia find, które odnajdzie ciąg znaków "readme" w nazwach tych plików. Następnie polecenie sort posortuje te wybrane nazwy plików poczynając od ich drugiego znaku. Wynik tej operacji zostanie wysłany do pliku, kórego nazwę użytkownik poda jako pierwszy argument dla naszego pliku wsadowego.

IV. Teraz przykład wykorzystaniem polecenia AT i warunkowego przetwarzania poleceń.

@echo off
for %%f in (
\\space \\xxx) do at %%f %1 /interactive /every:%2 notepad.exe 2>NULL && ^
echo Operacja dla %%f sie powiodla !!!
|| echo Opreacja dla %%f sie nie powiodla!!!

Powyższy plik wsadowy może być pomocny, jeżelibyśmy chcieli zaplanować zadanie dla kilku stanowisk. Dodatkowo chcielibyśmy uzykać informacje czy operacja się powiodła czy nie. Wykorzystujemy do tego pętle for w postaci takiej, jak z przykładu pierwszego, gdzie w liscie podajemy nazwy stanowisk. Argument %1 określa nam godzinę, a argument %2 dzień. Dodatkowo, jeżeli polecenie at wykona się pomyślnie to wyświetli się echo pierwsze. Jeżeli jednak at się nie wykona, to pierwsze echo się nie wyświetli, co umożliwi wyświetleniu się drugiemu echo. Ponieważ linia z instrukcją For jest zadługa stusujemy przeniesienie polecenia do następnego wiersza przypomocy znacznika ^. Jeżeli założymy, że na \\space można coś zaplanować, a na \\xxx nie, to po uruchomieniu skryptu na ekranie zobaczymy:


C:\Documents and Settings\mmn>e.bat 12:00 Wt
Dodano nowe zadanie o ident
yfikatorze = 1
Operacja dla \\space sie powiodla !!!
Odmowa dost
ępu.
Opreacja dla \\xxx sie nie powiodla!!!

V. Jako ostatni przykład podam następujący skrypt:

@echo off
for /l %%f IN (1,1,%2) do net send %1 error%%f > NUL && echo komunikat %%f zostal w
yslany do %1!
echo wyslalismy %2 komunikatow

Umożliwia on cykliczne wysyłanie komunikatu o coraz to nowym numerze błędu do stanowiska, którego nazwę podajemy jako drugi argument, tyle razy ile podaliśmy w pierwszym argumencie. Dodatkowo wykorzystaliśmy tu mechanizm warunkowego przetwarzania poleceń i tak w przypadku gdy polecenie net send zostanie wykonane pomyślnie uruchomi się instrukcja echo. Przy korzystaniu z tego skryptu należy jednak brać pod uwagę cierpliwość osoby po drugie stronie..

Po uruchomieniu tego skryptu gdzie nazwa komputera jest SPACE, a ilość powtórzeń wynosi 5 na naszej konsoli w przypadku powodzenia operacji wyświetli się:


C:\Documents and Settings\mmn>d space 5
komunikat 1 zostal wyslany do space!
komunikat 2 zostal wyslany do s
pace!
komunikat 3 zostal wyslany do space!
komunikat 4 zostal wyslany do space!
komunikat 5 zostal wyslany do space!
wyslalismy 5 komunikatow



Wyszukiwarka

Podobne podstrony:
SYSTEMY1, technik informatyk, soisk utk
Urządzenia do komunikacji bezprzewodowej(1), technik informatyk, soisk utk
Router, technik informatyk, soisk utk
16.11.06, technik informatyk, soisk utk
Moduł 6 - Warstwy TCP-IP(1), technik informatyk, soisk utk
zakresy sieci(1), technik informatyk, soisk utk
Zestaw zagadnień do egzaminu z UTK, technik informatyk, soisk utk
policealna - ZALICZENIE SOISK, technik informatyk, soisk utk
Moduł 5 - Protokoły rutowalne i nierutowalne(1), technik informatyk, soisk utk
Moduł 5- IrDA(1), technik informatyk, soisk utk
prace kontrolne soisk sem 1, technik informatyk, soisk utk
okablowanie sieciowe- skretka(1), technik informatyk, soisk utk
zagadnienia ob sem 1, technik informatyk, soisk utk
Moduł 5 - Protokoły VPN(1), technik informatyk, soisk utk
Porównanie systemów plików FAT, technik informatyk, soisk utk
pytania do SOISK, technik informatyk, soisk utk
prace kontrolne ob sem 1, technik informatyk, soisk utk
Zagadnienia do egzaminu z przedmiotu grafika komputerowa na semestr I, technik informatyk, soisk utk
Myszki i Klawiatury, technik informatyk, soisk utk

więcej podobnych podstron