WY SZA SZKO A BIZNESU W D BROWIE GÓRNICZEJ
Laboratorium : SYSTEMY OPERACYJNE
1
Przyk ady
Przyk adowe skrypty w Windows 2000:
I. Chc c sobie odrobin
skomplikowa wy wietlanie
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.txt 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:
WY SZA SZKO A BIZNESU W D BROWIE GÓRNICZEJ
Laboratorium : SYSTEMY OPERACYJNE
2
@echo off
If exist %1 del /P %1
for %%f in (*.cmd *.bat) do dir /b %%f >> %1
more %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 wszystko sie udalo! > %2.bat
dir c:\*.txt /s /b | find "readme" | sort /+1 > %1
call %2
date /t
date /t >> %1
echo koniec poszukiwan
WY SZA SZKO A BIZNESU W D BROWIE GÓRNICZEJ
Laboratorium : SYSTEMY OPERACYJNE
3
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 identyfikatorze = 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 wyslany do %1!
echo wyslalismy %2 komunikatow
WY SZA SZKO A BIZNESU W D BROWIE GÓRNICZEJ
Laboratorium : SYSTEMY OPERACYJNE
4
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 space!
komunikat 3 zostal wyslany do space!
komunikat 4 zostal wyslany do space!
komunikat 5 zostal wyslany do space!
wyslalismy 5 komunikatow
Literatura:
Batch File Command Reference for Windows 2000
http://www.labmice.net/articles/batchcmds.htm
http://www.republika.pl/mariuszgerasik