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.