Cykly

Pro cykly se v dávkách používá příkaz for a má zde velice rozsáhlou syntax a dají se s ním dělat užitečné věci.

Příkaz for – práce s množinou souborů

Velice užitečná je práce se soubory. Syntaxe je: for %x in (sada) do příkaz. Pokud příkaz použijete uvnitř dávky, je nutné proměnnou, která funguje jako řídící, vždy uvozovat dvěma procenty! Příklad vypíše všechny soubory v aktuální složce a počká na stisk klávesy.

@echo off
for %%x in (*) do echo %%x
pause

Tento příklad by se dal lehce pozměnit, aby vypsal jenom textové soubory.

@echo off
for %%x in (*.txt) do echo %%x
pause

Pravděpodobně vás při čtení těchto řádek napadlo, že by šlo tímto způsobem získat název souboru a potom soubor zdvojit. Ano, opravdu to jde.

@echo off
set citac=0
for %%x in (*) do (
  echo %%x
  copy "%%x" "Kopie - %%x"
  set /a citac+=1
  REM ** Přičti pokaždé jedna k proměnné citac **
)
  echo Zkopíroval jsem %citac% souborů
  pause

Příkaz for /L – početní operace

Samozřejmě, že můžete pomocí for dělat také operace se soubory. Syntaxe je: for /l in (odkud, o kolik, kam) do příkaz . Myslím, že tento příklad mluví za vše.

@echo off
echo NECO Z MATEMATIKY
echo Cisla se deli na suda a licha. Suda cisla jsou bezezbytu delitelna
echo cislem dve a licha ne.
echo Suda cisla od 1 do 20
for /L  %%x in (2,2,20) do echo %%x
pause
cls
echo Licha cisla od 1 do 20
for /L  %%x in (1,2,20) do echo %%x
pause
cls
echo Nasobilka 2:
for /L %%x in (0,2,20) do echo %%x
pause
cls
echo Nasobilka 7412:
for /L %%x in (0,7412,74120) do echo %%x
pause

Příka for /F – práce se soubory

Toto konečný příklad této lekce a věřím, že tuto funkci příkazu for v budoucnu využijete. Všechno budu vysvětlovat na příkladu. Nejdříve si vytvořte textový soubor adresy.txt, který bude vypadat následovně a potom vytvořte soubor generuj.bat, který je pod ním.

adresy.txt
#Toto je vzorový příklad
JMENO | BYDLISTE | POVOLANI
Karel Novak | Praha | ridic
ing. Jan Faust | Pribram | urednik
#Jaroslav Mlady | Olomouc | ucitel
Bedrich Kropenka | Teplice | kuchar
generuj.bat
@echo off
for /f "eol=# delims=| tokens=1,3" %%A in (adresy.txt) do (
 echo %%A, %%B
 REM ** Příkaz echo jsem u členu %%B nepsal, protože čárka značí, že se mají
 REM ** vypsat oba
 )
pause

Pro správnou funkčnost je třeba, aby dávka i soubor adresy.txt byly ve stejné složce. Myslím, že na souboru adresy.txt nemusím nic vysvětlovat, ale generuj.bat by si už několik vysvětlení zasluhoval.

eol=# Tento příkaz znamená, že řádky začínající znakem # budou přeskočeny (samozřejmě si můžete zvolit vlastní znak).
delims=| Zde se určuje, jakým znakem jsou odděleny sloupce.
tokens=1,3 Tady si můžete určit s jakými sloupci chcete pracovat. Určitě jste si všimli, že sloupec 2 (Bydliště) není ve výsledku vidět.

U tohoto příkazu jsem úmylsně psal strohé vysvětlení nebo vůbec žádné, protože zde jsem vás potřeboval donutit k praxi a ne abyste se něco našprtali.