Podmínka se vykonává jenom jednou a na základě výsledku provede operaci a cyklus se vykonává dokud nějaká podmínka přetrvává. Tak třeba napíšu podmínku, když je a = 1
skoč. Dávka provede porovnání a pokud je a = 1
tak skočí. Kdybych chtěl stejnou věc udělat v cyklu tak by zápis zněl asi takto: dokud je a = 1
tak skákej.
Podmínky
Podmínky se zapisují příkazem IF
. Podmínka se dá také negovat (obrátit) a to příkazem not
. První konstrukci, kterou vás u dávek naučím je errorlevel. Používá se pokud budeme chtít vyhodnotit výsledek předchozího příkazu. Tak třeba budete chtít vytvořit nějaký soubor a cesta, kterou jste udali nebude nalezena. Potom skončí příkaz s chybou. Tady je malý příklad:
@echo off //vypnu režim echo
copy c:text.txt c:text2.txt //zkouším zkopírovat soubor
if errorlevel 1 goto chyba //pokud soubor neexistuje bude návratový
//kód jedna
echo Vse probehlo v poradku //pokud je návratový kód jiný vypiš toto
goto konec //přejdi na návěstí konec
:chyba //návěstí chyba
echo Nastala chyba!! //vypiš hlášení o chybě
:konec
pause //počkej na stisk klávesy
Rutinní záležitostí je porovnávání proměnných, ale ještě než ukážu jednoduchý příklad, tak bych vás chtěl ještě obeznámit s příkazem ELSE. Pokud vytvoříte podmínku (třeba jestli se a = 1
tak skoč) tak pokud neuspěje, program skončí, ale to se vám asi nelíbí a chcete, aby dávka něco udělala v případě neúspěchu a na to se používá příkaz ELSE. Teď malý příklad, který porovnává aktuální datum s 29. 4. 2006 a pokud je to dnes tak vypíše “Svátek má Robert” a v opačném případě, že neví kdo má svátek. Takto by šel vytvořit i kalendář, ale 365 dní se mi sem nechtělo psát.
@echo off
set datum2="%date%"
set datum="so 29.04.2006"
if %datum% EQU %datum2% (
echo Dnes je %date% a svatek ma Robert. Gratujuju!
pause
) else (
echo Dnes je %date% a nevím kdo má svátek
pause
)
Asi vás trochu zmátly závorky. Existují i dávky, které by fungovali i bez nich, ale tyto dávky by mohli mít jenom jeden příkaz, pokud by byla podmínka splněna. To sice dostačuje, pokud bychom chtěli jenom třeba skočit na návěstí, ale já to vždycky dělal se závorkama, a tak to nebudu měnit. Je nutné dodržovat i pořadí závorek. Dále jste si určitě všimli operátoru EQU
a asi vás zaskočilo, že tam není operátor “==” jako v ostatních programovacích jazycích. Já taky nechápu jaký to má smysl, ale musíte se s tím smířit. Další operátory jsou následující:
EQU |
rovná se (equal) |
NEQ |
nerovná se (not equal) |
LSS |
menší než (less) |
GTR |
větší než (great) |
LEQ |
menší nebo roven (less or equal) |
GEQ |
větší nebo roven (great or equal) |
Další velice užitečnou funkcí if
, je ověření existence souboru. Tento příklad detekuje, jaký máte operační systém. Dávka hledá tapetu Rododendron.bmp
, která je pouze ve Windows XP. Takto by se dal zjistit i antivirový program popřípadě záplaty operačního sytému. Pozn.: Příklad předpokládá složku Windows na disku C:.
@echo off
if exist C:WindowsRododendron.bmp (
echo Na tomto pocitaci bezi Windows XP
pause
) else (
echo Na tomto pocitaci je jiny operacni system nez WinXP
pause
)
Návěstí
Určitě jste si všimli, že pokud v dávce nezadáte podmínku tak automaticky zpracuje následující příkaz. Ale občas se může stát, že potřebujete přejít do jiné oblasti kódu a právě začátek této oblasti se nazývá návěstí. Návěstí je jeden řádek, který začíná dvojtečkou a za ním následuje název návěstí. Na návěstí se stejně jako ve vyšších programovacích jazycích skáče pomocí GOTO). GOTO je nepodmíněný skok a pokud z něj budete chtít udělat podmíněný, musíte ho zkombinovat s příkazem IF.