background image

II. Programowanie wsadowe DOS/Windows 

1

II. Programowanie wsadowe DOS/Windows 

 
Instrukcj

ę

  przygotowano  na  podstawie  materiałów  udost

ę

pnionych  przez  kolegów  z  Zakładu 

Sterowania  Wydziału  Elektrycznego  (Obecnie  oryginał  instrukcji  znajduje  si

ę

  na  stronie 

http://www.ee.pw.edu.pl/~graniszw), plików pomocy do systemu Windows oraz materiałów własnych. 

1. Wst

ę

Program  wsadowy  jest  to  ci

ą

g  polece

ń

  trybu  linii  komend  lub  wywoła

ń

  programów  zapisany  w  pliku 

tekstowym o rozszerzeniu 

.bat

 Celem programowania wsadowego jest:  

• 

przyspieszenie pracy  

• 

personalizacja 

ś

rodowiska systemu operacyjnego  

W  j

ę

zyku  programowania  wsadowego  mo

Ŝ

na  stosowa

ć

  wszystkie  komendy  dost

ę

pne  w  trybie  linii 

komend. Do sterowania działaniem programu wsadowego słu

Ŝą

 komendy steruj

ą

ce:  

call 

-   uruchamia  programu  wsadowego  z  poziomu  innego  programu  wsadowego,  a 

nast

ę

pnie  powrót  do  programu 

ź

ródłowego  (odpowiednik  procedury  w  j

ę

zykach 

wy

Ŝ

szego rz

ę

du)  

echo 

-   wy

ś

wietla  komunikaty  na  ekranie,  oraz  mo

Ŝ

e  słu

Ŝ

y

ć

  do  wł

ą

czania  lub  wył

ą

czania 

wy

ś

wietlania komunikatów  

for 

-   powtarza komend

ę

 dla zestawu zmiennych  

goto 

-   przechodzi do innej cz

ęś

ci programu  

If 

-   wykonuje komendy w zale

Ŝ

no

ś

ci od spełnienia warunku  

pause 

-   zatrzymuje wykonanie programu do czasu wci

ś

ni

ę

cia dowolnego klawisza  

rem 

-   komentarz  

shift 

-   przesuwa parametry programu (

%9



%8,%8



%7 itd.)

 

W dalszej cz

ęś

ci instrukcji zostan

ą

 szczegółowo omówione powy

Ŝ

sze instrukcje. 

 
Informacje  o  sposobie  wywołania  komendy  uzyskuje  si

ę

  poprzez  wpisanie  nazwy  komendy  z 

parametrem 

/?

  np.: 

if  /?

.  Nazwy  programów  wsadowych  podlegaj

ą

  tym  samym  ograniczeniom, 

jak  nazwy  plików  w  systemie  -  dopuszczalne  s

ą

  długie  nazwy.  Programy  wsadowe  uruchamia  si

ę

 

podaj

ą

c  w  trybie  interaktywnym  nazw

ę

  pliku  wsadowego  (najlepiej  ł

ą

cznie  z  rozszerzeniem).  Plik 

wsadowy  mo

Ŝ

na  tak

Ŝ

e  uruchomi

ć

  w  trybie  okienkowym  wybieraj

ą

c  go  poprzez  podwójne  (lub 

jednokrotne  -  zale

Ŝ

nie  od  ustawie

ń

)  klikni

ę

cie  klawiszem  myszki  -  tak  jak  ka

Ŝ

dy  inny  program. 

Zatrzyma

ć

  wykonanie  programu  wsadowego  mo

Ŝ

na  poprzez  naci

ś

ni

ę

cie  kombinacji  klawiszy 

Ctrl+S

  lub 

Pause

.  Wykonanie  programu  jest  kontynuowane  po  naci

ś

ni

ę

ciu  dowolnego  klawisza. 

Przerwa

ć

  działanie  programu  wsadowego  mo

Ŝ

na  poprzez  naci

ś

ni

ę

cie  kombinacji  klawiszy 

Ctrl+C

 

lub 

Pause

.  

2. U

Ŝ

ywanie Notatnika do tworzenia skryptów. 

Skrypty  s

ą

  plikami  tekstowymi,  wi

ę

c  do  ich  tworzenia  mo

Ŝ

na  u

Ŝ

ywa

ć

  programu 

Notatnik

.  Nale

Ŝ

jednak uwa

Ŝ

a

ć

 na jedn

ą

 cech

ę

 tego programu: podczas zapisywania dodaje on rozszerzenie 

txt

 do 

nazwy  programu,  np.  zapisuj

ą

c  pod  nazw

ę

 

skrypt.bat

  program  zapisze 

skrypt.bat.txt

czyli  NIE  jest  to  skrypt.  Aby 

Notatnik

  nie  dodawał  rozszerzenia,  to  przy  pierwszym  zapisie  (tylko 

wtedy  podajemy  nazw

ę

)  oprócz  wpisania  nazwy  i  rozszerzenia,  np. 

skrypt.bat

  nale

Ŝ

y  na  oknie 

background image

II. Programowanie wsadowe DOS/Windows 

2

dialogowym  wybra

ć

  opcj

ę

 

Wszystkie  pliki

  w  okienku 

Zapisz  jako  typ

.  Uchroni  to 

przed dodaniem rozszerzenia 

txt

Przy  przegl

ą

daniu  plików  za  pomoc

ą

  standardowego  narz

ę

dzia 

„Mój  komputer”

  s

ą

  ukryte 

znane  przez  system  operacyjny  rozszerzenia  plików,  co  utrudnia  podejrzenie  prawdziwego 

rozszerzenia  pliku.  Aby  wył

ą

czy

ć

  t

ą

  opcj

ę

,  nale

Ŝ

y  wybra

ć

  z  menu 

Narz

ę

dzia



Opcje 

folderów...

  a  nast

ę

pnie  na  zakładce 

Widok

  odznaczy

ć

  opcj

ę

 

Ukryj  rozszerzenia 

plików znanych typów

3. Wy

ś

wietlanie komunikatów 

Komunikaty  w  programach  wsadowych  mo

Ŝ

na  wy

ś

wietla

ć

  korzystaj

ą

c  z  instrukcji 

echo

.  Składnia 

tego polecenia: 

echo <Tre

ść

 komunikatu>  

Aby wy

ś

wietli

ć

 pust

ą

 lini

ę

 nale

Ŝ

y u

Ŝ

y

ć

 polecenia 

echo. 

(z kropk

ą

 na ko

ń

cu, bez spacji). 

Przykład 

echo Program przesuwa pliki z katalogu KAT1 do KAT2 

move KAT1 KAT2 

dir KAT2 

 
Aby  dany  tekst  nie  wy

ś

wietla

ć

  na  ekranie,  ale  aby  zapisa

ć

  do  pliku,  nale

Ŝ

y  posłu

Ŝ

y

ć

  si

ę

  symbolami 

przekierowania 

>

 oraz 

>>

 omówionymi w instrukcji do pierwszego 

ć

wiczenia. 

 
W  celu  wy

ś

wietlania  dłu

Ŝ

szych  tekstów,  korzystniej  jest  zapisa

ć

  tre

ść

  w  pliku  tekstowym  i  wy

ś

wietli

ć

 

go u

Ŝ

ywaj

ą

c instrukcji 

type

 - przyspiesza to prac

ę

, szczególnie w sieciach.  

 

Komenda 

echo

  mo

Ŝ

e  by

ć

  u

Ŝ

yta  do  ograniczenia  wy

ś

wietlania  wykonywanych  instrukcji  programu.  I 

tak, aby wył

ą

czy

ć

 wy

ś

wietlanie wykonywanych instrukcji nale

Ŝ

y u

Ŝ

y

ć

 instrukcji: 

echo off 

Aby wł

ą

czy

ć

 wy

ś

wietlanie wykonywanych instrukcji: 

echo on 

 

Efekt  podobny  do  u

Ŝ

ycia 

echo  off

  dla  pojedynczej  instrukcji  mo

Ŝ

na  osi

ą

gn

ąć

  poprzedzaj

ą

instrukcj

ę

  znakiem 

@

.  Warto wspomnie

ć

Ŝ

e wywołuj

ą

c polecenie 

echo off

 pojawi si

ę

 na ekranie 

ta  instrukcja  (bo  „echo”  nie  jest  jeszcze  wył

ą

czone),  dlatego  najcz

ęś

ciej  jest  wywoływane  polecenie 

@

echo  off

.  Zazwyczaj  nie  jest  po

Ŝą

dane  wy

ś

wietlanie  poszczególnych  polece

ń

  ze  skryptu, 

dlatego te

Ŝ

 wi

ę

kszo

ść

 skryptów b

ę

dzie si

ę

 zaczyna

ć

 od tego polecenia. 

Przykład 

@echo off 

echo  Program  kopiuje  pliki  tekstowe  z  katalogu  KAT1  do 

KAT2 

copy KAT1 KAT2 

dir KAT2 

background image

II. Programowanie wsadowe DOS/Windows 

3

4. Komenda 

pause

 

Zatrzymanie programu mo

Ŝ

na wymusi

ć

 korzystaj

ą

c z komendy 

pause

. Instrukcja 

pause

 wy

ś

wietla 

komunikat  

Naci

ś

nij dowolny klawisz aby kontynuowa

ć

...  

a nast

ę

pnie oczekuje na wci

ś

ni

ę

cie dowolnego klawisza. 

Przykład 

@echo off 

echo Program kasuje pliki tekstowe w KAT1 

echo Zaczynam kasowa

ć

... 

pause 

del KAT1\*.txt 

cls 

dir KAT1 

 

W  celu  pomini

ę

cia  wy

ś

wietlania  komunikatu,  wyj

ś

cie  komendy 

pause

  mo

Ŝ

na  przekierowa

ć

  na 

wyj

ś

cie puste: 

nul

, tak jak na poni

Ŝ

szym przykładzie: 

echo Naci

ś

nij dowolny klawisz 

pause > nul 

Ć

wiczenia do wykonania 

1.  W katalogu, do którego masz prawo do zapisu, utwórz skrypt o nazwie 

a.bat

 

2.  Skrypt ma utworzy

ć

 nast

ę

puj

ą

c

ą

 struktur

ę

 katalogów: 

 

kat1 

 

kat2 

 

 

podkatalog jeden 

 

(prosz

ę

 zachowa

ć

 spacj

ę

 w nazwie podkatalogu) 

3.  W ka

Ŝ

dym podkatalogu prosz

ę

 utworzy

ć

 plik 

nazwa.txt

, który b

ę

dzie zawierał 

ś

cie

Ŝ

k

ę

 do 

tego katalogu (nale

Ŝ

y wykorzysta

ć

 polecenie 

cd

 i przekierowanie strumienia)  

5. Etykieta i skok do etykiety 

goto

 

Etykieta  jest  to  nazwa  danego  wiersza  w  skrypcie.  Etykiety  definiuje  si

ę

  pisz

ą

c  nazw

ę

  etykiety 

poprzedzon

ą

 dwukropkiem np.:  

:etykieta 

 

Poprzez etykiety i instrukcje skoku 

goto

 mo

Ŝ

na zmieni

ć

 kolejno

ść

 wykonywania instrukcji programu. 

Składnia polecenia skoku wygl

ą

da nast

ę

puj

ą

co: 

goto etykieta 

Przykład: 

echo Zaraz zostanie wywołana instrukcja skoku 

background image

II. Programowanie wsadowe DOS/Windows 

4

goto et1 

echo To polecenie zostanie pomini

ę

te 

:et1 

6. Programy z parametrami i polecenie 

shift

 

Programy wsadowe mog

ą

 by

ć

 wywoływane z parametrami tak jak zwykłe programy/polecenia, np. dla 

polecenia copy

 plik1 plik2

 pierwszym argumentem jest 

plik1

, a drugim 

plik2

. Dost

ę

p do 

parametrów  z  poziomu  programu  wsadowego  odbywa  si

ę

  przez  u

Ŝ

ycie  symboli  %0  do  %9.  Symbol 

%0  oznacza  nazw

ę

  wykonywanego  programu  wsadowego.  Symbole  od  %1  do  %9  odpowiadaj

ą

 

kolejnym parametrom. W sposób prosty mo

Ŝ

na si

ę

 odwoła

ć

 do dziewi

ę

ciu parametrów. 

Przykład 

@echo off 

echo Program kopiuje pliki tekstowe 

pause 

copy %1\*.txt %2 

cls 

dir %2 /p 

 

Aby  móc  odczyta

ć

  kolejne  parametry  NIE  mo

Ŝ

na  posłu

Ŝ

y

ć

  si

ę

  symbolem 

%10

,  poniewa

Ŝ

  przez 

system  zostanie  to  zrozumiane  jako  parametr  pierwszy,  do  którego  zostanie  doklejone  0,  czyli  dla 
wywołania: 

Skrypt.bat Ala Ola 4 5 6 7 8 9 10 11 

parametry b

ę

d

ą

 interpretowane w nast

ę

puj

ą

cy sposób 

%1 = Ala 

%10 = Ala0 

 

Aby móc korzysta

ć

 z kolejnych parametrów nale

Ŝ

y u

Ŝ

y

ć

 polecenia 

shift

, które przesuwa kolejno

ść

 

argumentów  o  jeden,  tzn.  parametr 

%1

  staje  si

ę

  parametrem 

%0

,  parametr 

%2

  staje  si

ę

 

%1

  itd., 

natomiast  niedost

ę

pny  wcze

ś

niej  parametr  dziesi

ą

ty  staje  si

ę

  parametrem 

%9

  (poprzednia  warto

ść

 

parametru 

%0

 zostanie „skasowana”). 

Przykład 

@echo off 

echo %0  

shift 

echo %0  

shift 

echo %0  

Po wywołaniu skryptu poleceniem  

Skrypt.bat Ala Ola Ela 

wy

ś

wietli si

ę

 nast

ę

puj

ą

cy wynik: 

Skrypt.bat  

Ala  

background image

II. Programowanie wsadowe DOS/Windows 

5

Ola 

7. Instrukcja warunkowa 

if

 

W programach wsadowych mo

Ŝ

na u

Ŝ

ywa

ć

 instrukcji warunkowej 

if

, której ogólna zasada sprowadza 

si

ę

  do  sprawdzenia  okre

ś

lonego  warunku  logicznego  i  przy  jego  spełnieniu  wykonania  dowolnej 

instrukcji.  
 

if [not] errorlevel numer instrukcja 

(Nawiasy [] oznaczaj

ą

 cz

ęść

 opcjonaln

ą

.) 

Ta  posta

ć

  instrukcji 

if

  wykona  instrukcj

ę

 

instrukcja

  je

Ŝ

eli  kod  wyj

ś

ciowy  z  poprzedniego 

programu 

(errorlevel

) [nie] jest mniejszy ni

Ŝ

 numer. 

Przykład 

copy nie_ma_tego_pliku.txt plik2.txt 

if errorlevel 1 echo Nie udało si

ę

 skopiowa

ć

 

 

if [not] ci

ą

g1==ci

ą

g2 instrukcja 

Wykonanie  instrukcji 

instrukcja

,  je

Ŝ

eli  ci

ą

g  znaków 

ci

ą

g1

  [nie]  jest  równy  ci

ą

gowi 

ci

ą

g2

Aby  ustrzec  si

ę

  przed  bł

ę

dami  najlepiej  jest  porównywa

ć

  ci

ą

gi  znaków  wzi

ę

te  w  cudzysłów.  Umo

Ŝ

liwi 

to  porównywanie  pustego  ci

ą

gu  znaków  (dwa  cudzysłowy  obok  siebie)  oraz  ci

ą

gów  znaków  ze 

spacjami.  Je

Ŝ

eli  jeden  z  ci

ą

gów  znaków  jest  parametrem  wej

ś

ciowym,  to  mo

Ŝ

e  (ale  nie  musi)  by

ć

 

wzi

ę

ty  w  cudzysłów,  wówczas  ci

ą

g  znaków  b

ę

dzie  w  "podwójnym  cudzysłowie".  Aby  si

ę

  przed  tym 

ustrzec,  nale

Ŝ

y  odwoływa

ć

  si

ę

  do  parametru  poprzez 

%~1

  (znak  tylda  ~)  –  wi

ę

cej  na  ten  temat  w 

dalszej cz

ęś

ci instrukcji. 

Przykład 

if "%~1"=="kopiuj" goto FCOPY 

if "%~1"=="przesun" goto FMOVE 

goto EXIT 

:FCOPY 

copy KAT1 KAT2 

goto EXIT 

:FMOVE 

move KAT1 KAT2 

:EXIT 

 

if [not] exist nazwa_pliku instrukcja 

Wykonanie instrukcji 

instrukcja

 je

Ŝ

eli [nie] istnieje plik: 

nazwa_pliku

Ć

wiczenia do wykonania 

1.  W katalogu, w którym utworzyłe

ś

 skrypt 

a.bat

, utwórz skrypt o nazwie 

b.bat

 

2.  Skrypt  musi  by

ć

  wywoływany  z  jednym  parametrem.  Je

Ŝ

eli  uruchomiono  skrypt  bez  podania 

parametru, wówczas skrypt ma wy

ś

wietli

ć

 ostrze

Ŝ

enie i zako

ń

czy

ć

 działanie. 

background image

II. Programowanie wsadowe DOS/Windows 

6

3.  W zale

Ŝ

no

ś

ci od warto

ś

ci tego argumentu skrypt ma wykona

ć

 nast

ę

puj

ą

ce działania: 

dla 

a

 – wypisa

ć

 na ekranie zawarto

ść

 bie

Ŝą

cego katalogu 

dla 

b

 – otworzy

ć

 w domy

ś

lnej przegl

ą

darce stron

ę

 wydziału elektrycznego 

dla c – zapisa

ć

 do pliku o nazwie 000.txt</I> bie

Ŝą

c

ą

 dat

ę

 i godzin

ę

 

4.  W  przypadku,  gdy  argument  nie  jest  równy 

Ŝ

adnemu  z  powy

Ŝ

szych,  skrypt  ma  wy

ś

wietli

ć

 

odpowiedni  komunikat  o  bł

ę

dzie  i  po  naci

ś

ni

ę

ciu  dowolnego  klawisza  skrypt  ma  zako

ń

czy

ć

 

działanie. 

8. Instrukcja 

for

 

FOR [opcja] [%% | %]x IN (zbiór) DO polecenie 

Instrukcja 

for

 powtarza komend

ę

 dla ka

Ŝ

dej pozycji w zadanym zbiorze, przypisuj

ą

c danej zmiennej 

x

  kolejne  warto

ś

ci  z  tego  zbioru.  W  ten  sposób  umo

Ŝ

liwia  ona  np.  uruchomienie  okre

ś

lonego 

polecenia dla ka

Ŝ

dego pliku znajduj

ą

cego si

ę

 w zbiorze.  

Zmienna 

x

 (mo

Ŝ

e to by

ć

 oczywi

ś

cie inna nazwa) jest zmienn

ą

 steruj

ą

c

ą

. W przypadku, gdy komenda 

for

 jest wpisywana w linii polece

ń

, to nazwa zmiennej musi by

ć

 poprzedzona jednym znakiem 

%

. W 

przypadku, gdy komenda ta znajduje si

ę

 w pliku wsadowym, wymagane jest poprzedzenie jej 

%%

 

FOR %I IN (C:\*.*) DO @echo %I 

To polecenie wy

ś

wietli list

ę

 plików (tylko plików) o dowolnej nazwie z katalogu głównego 

c:\

. Prosz

ę

 

zauwa

Ŝ

y

ć

  znak 

@

  przed  poleceniem 

echo

:  bez  tego  znaczka  za  ka

Ŝ

dym  razem  pojawiałoby  si

ę

 

wykonywane  polecenie,  a  nast

ę

pnie  wynik  tego  poleceni.  Znak  po  prostu 

@

  eliminuje  wy

ś

wietlanie 

polecenia.  
Skrypt zawieraj

ą

cy t

ę

 instrukcj

ę

 mógłby wygl

ą

da

ć

 tak: 

@echo of 

FOR %%I IN (C:\*.*) DO echo %%I 

echo on 

W  tym  przypadku  nale

Ŝ

y  zwróci

ć

  uwag

ę

  na  fakt  poprzedzenia  zmiennej 

I

  dwoma  znakami  procent. 

Ponadto  przed  poleceniem 

echo

  nie  ma  znaku 

@

,  poniewa

Ŝ

  wy

ś

wietlanie  polecenia  zostało 

wył

ą

czone wcze

ś

niej poleceniem 

echo off

 

FOR /D %I IN (C:\*.*) DO @echo %I 

Przeł

ą

cznik /D powoduje, 

Ŝ

e zamiast plików wyszukiwane s

ą

 katalogi. 

 

FOR /R "%USERPROFILE%\Menu Start" %I IN (*.*) DO @echo %I 

Przeł

ą

cznik 

/R

  powoduje, 

Ŝ

e  wyszukiwanie  plików  (brak  przeł

ą

cznika 

/D

)  jest  rozpoczynane  od  

katalogu 

"%USERPROFILE%\Menu  Start"

  i  kontynuowane  we  wszystkich  podkatalogach. 

Zmienna 

ś

rodowiskowa 

%USERPROFILE%

  okre

ś

la 

ś

cie

Ŝ

k

ę

  dost

ę

pu  do  katalogu  z  profilem 

u

Ŝ

ytkownika,  mo

Ŝ

e  by

ć

  rozwini

ę

ta  do 

C:\Documents  and  Settings\user

.  Dodanie 

\Menu Start

 spowodowało, 

Ŝ

ś

cie

Ŝ

ka startowa wygl

ą

da nast

ę

puj

ą

co 

C:\Documents and 

Settings\user\Menu  start

.  Poniewa

Ŝ

  w  nazwie  katalogu 

Menu  start

  jest  spacja, 

dlatego konieczne jest wzi

ę

cie 

ś

cie

Ŝ

ki w cudzysłów. 

 

background image

II. Programowanie wsadowe DOS/Windows 

7

Instrukcja 

FOR

  umo

Ŝ

liwia  ponadto  traktowanie  zbioru  jako  zbioru  liczb  całkowitych  (przeł

ą

cznik 

/L

oraz  przetwarzanie  danych  z  pliku  (przeł

ą

cznik 

/F

).  Zainteresowanych  odsyłam  do  pliku  pomocy  dla 

instrukcji 

FOR

9. Zaawansowane  odwoływanie  si

ę

  do  parametrów  wywoływania 

skryptu. 

Je

Ŝ

eli  parametrem  wywołania  skryptu 

%1

  jest nazwa pliku, a program na tej podstawie musi okre

ś

li

ć

 

nazw

ę

  katalogu,  "czyst

ą

"  nazw

ę

  pliku  i  oddzielnie  rozszerzeniem  pliku,  wówczas  nale

Ŝ

y  posłu

Ŝ

y

ć

  si

ę

 

nast

ę

puj

ą

c

ą

 składni

ą

%~1

 

-   rozwija %I usuwaj

ą

c wszystkie obejmuj

ą

ce cudzysłowy (") 

%~f1 

-   rozwija %I do pełnej nazwy 

ś

cie

Ŝ

ki 

%~d1 

-   rozwija %I tylko do litery dysku 

%~p1  

-   rozwija %I tylko do 

ś

cie

Ŝ

ki 

%~n1 

-   rozwija %I tylko do nazwy pliku 

%~x1 

-   rozwija %I tylko do rozszerzenia pliku 

Charakterystyczny jest tutaj znak ~ (tylda), który usuwa cudzysłowy. 
 

Przykład 

@echo off 

if not exist "%~1" goto end 

echo copy %1 "%~d1%~p1%~n1.bak" 

:end 

echo on 

Ć

wiczenia do wykonania 

1. 

W katalogu, w którym utworzyłe

ś

 skrypt 

a.bat

, utwórz skrypt o nazwie c

.bat  

2.  Skrypt  ma  utworzy

ć

  w  katalogu  bie

Ŝą

cym  plik  o  nazwie 

wynik.log

,  do  którego  zapisze 

bie

Ŝą

c

ą

 godzin

ę

 

3.  Skrypt ma wyszuka

ć

 wszystkie pliki o rozszerzeniu 

txt

 znajduj

ą

ce si

ę

 w katalogu bie

Ŝą

cym i 

jego podkatalogach. 

4.  Dla ka

Ŝ

dego znalezionego pliku skrypt ma wykona

ć

 nast

ę

puj

ą

ce trzy rzeczy: 

a)  wypisa

ć

 nazw

ę

 pliku wraz ze 

ś

cie

Ŝ

k

ą

 dost

ę

pu na ekranie 

b)  dopisa

ć

  nazw

ę

  pliku  wraz  ze 

ś

cie

Ŝ

k

ą

  dost

ę

pu  do  utworzonego  wcze

ś

niej  pliku 

wynik.log

 

c)  skopiowa

ć

  plik  do  tego  samego  katalogu  pod  t

ą

  sam

ą

  nazw

ę

,  ale  z  innym 

rozszerzeniem: 

bak