5. říjen 2020 Autor: Tibor
Provede zadaný příkaz pro každý soubor z množiny. FOR %proměnná IN (množina) DO příkaz [parametry-příkazu] %proměnná Určuje jednopísmenný proměnný parametr. (množina) Určuje množinu souborů. Lze použít i zástupné znaky. příkaz Určuje příkaz, který bude proveden pro každý soubor. parametry-příkazu Určuje parametry nebo přepínače zadaného příkazu. Při použití příkazu FOR v dávkovém programu je třeba zadat %%proměnná místo %proměnná. V názvech proměnných se rozlišují malá a velká písmena, takže %i je jiná proměnná než %I. Jsou-li povolena rozšíření příkazů, lze používat i tyto další tvary příkazu FOR: FOR /D %proměnná IN (sada) DO příkaz [parametry-příkazu] Obsahuje-li sada zástupné znaky, budou porovnány názvy adresářů místo názvů souborů. FOR /R [[jednotka:]cesta] %proměnná IN (sada) DO příkaz [parametry-příkazu] Prochází strom adresářů začínající umístěním [jednotka:]cesta a v každém adresáři stromu provádí příkaz FOR. Není-li za přepínačem /R uveden žádný adresář, výchozím adresářem je adresář aktuální. Je-li sada právě jedna tečka (.), bude pouze vypsán strom adresářů. FOR /L %proměnná IN (začátek,krok,konec) DO příkaz [parametry-příkazu] Sada je posloupnost čísel oddo po . Např. (1,1,5) vygeneruje sekvenci (1 2 3 4 5) a (5,-1,1) vygeneruje sekvenci (5 4 3 2 1) FOR /F ["možnosti"] %proměnná IN (sada-souborů) DO příkaz [parametry-příkazu] FOR /F ["možnosti"] %proměnná IN ("řetězec") DO příkaz [parametry-příkazu] FOR /F ["možnosti"] %proměnná IN ('příkaz') DO příkaz [parametry-příkazu] nebo v případě použití parametru usebackq: FOR /F ["možnosti"] %proměnná IN (sada-souborů) DO příkaz [parametry-příkazu] FOR /F ["možnosti"] %proměnná IN ('řetězec') DO příkaz [parametry-příkazu] FOR /F ["možnosti"] %proměnná IN ('příkaz') DO příkaz [parametry-příkazu] Sada souborů je jeden či více názvů souborů. Každý soubor je otevřen, přečten a zpracován dříve, než se přejde k dalšímu v sadě. Zpracování se skládá z načtení souboru, jeho rozdělení na jednotlivé řádky textu a rozebrání každého řádku na tokeny. Poté je smyčka FOR zavolána s hodnotami proměnných nastavenými podle nalezených tokenů. Podle výchozího nastavení vrací /F z každého řádku každého souboru první token uzavřený v mezerách. Prázdné řádky jsou vynechány. Výchozí způsob rozboru lze změnit zadáním volitelného parametru možnosti. Jedná se o řetězec v uvozovkách, který obsahuje alespoň jedno klíčové slovo určující parametry rozboru. Klíčová slova jsou tato: eol=c - Určuje poznámkový znak konce řádku (pouze jeden). skip=n - Určuje počet řádků, které mají být vynechány na začátku souboru. delims=xxx - Určuje sadu oddělovačů (nahrazuje výchozí sadu oddělovačů tvořenou mezerou a tabulátorem). tokens=x,y,m-n - Určuje, které tokeny z každého řádku mají být v každé iteraci poslány do těla smyčky FOR. Tím je umožněno přidělování dalších názvů proměnných. Forma m-n určuje rozsah od m-tého do n-tého tokenu. Je-li poslední znak v řetězci tokens= hvězdička, potom bude přidělena další proměnná, jejíž hodnotou je text, který na řádku zbývá za posledním analyzovaným tokenem. usebackq - Určuje použití nové sémantiky, kdy řetězec ve zpětných uvozovkách představuje příkaz a řetězec v jednoduchých uvozovkách představuje doslovný řetězec příkazu a umožňuje použít dvojité uvozovky pro názvy souborů v sadě názvů souborů. Příklad: FOR /F "eol=; tokens=2,3* delims=, " %i in (soubor.txt) do @echo %i %j %k Takto by byl analyzován každý řádek v souboru můjsoubor.txt, přičemž by byly ignorovány řádky začínající středníkem, druhý a třetí prvek (token) každého řádku by byl předán tělu příkazu FOR, s prvky oddělenými čárkami a (nebo) mezerami. Povšimněte si, že příkazy těla smyčky FOR používají odkaz %i pro převzetí druhého prvku, odkaz %j převezme třetí prvek a %k převezme všechny prvky zbývající za třetím prvkem. Názvy souborů obsahující mezery uzavřete do uvozovek. Abyste mohli takto použít uvozovky, použijte také parametr usebackq, jinak bude předpokládáno, že uvozovky definují znakový řetězec určený k analýze. Odkaz %i je explicitně deklarován v příkazu FOR a odkazy %j a %k jsou implicitně deklarovány parametrem tokens=. V řádku tokens=je možné uvést až 26 prvků, pokud tím nedojde k pokusu deklarovat proměnnou dále než písmeno z nebo Z. Nezapomeňte, že názvy proměnných příkazu FOR jsou jednopísmenné a jsou rozlišována malá a velká písmena, jsou to globální proměnné v libovolném okamžiku jich nesmí být aktivních více než 52. Logiku analýzy příkazu FOR /F je možné použít pro bezprostřední řetězec, a to zadáním skupiny názvů souborů (uvnitř závorek) jako řetězec uzavřený v jednoduchých uvozovkách. Bude považován za jeden vstupní řádek ze souboru, a bude analyzován. Příkaz FOR /F je možné použít k analýze výstupu příkazu. Dosáhnete toho uzavřením sady názvů souborů (uvnitř závorek) mezi zpětné apostrofy. Daný řetězec bude považován za příkazový řádek a předán podřízenému procesoru CMD.EXE. Výstup bude uchován v paměti a analyzován, jako by šlo o soubor. Proto v následujícím příkladu: FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i budou vypsány názvy aktuálních systémových proměnných. Dále bylo vylepšeno nahrazování odkazů na proměnné příkazu FOR. Nyní můžete používat následující nepovinnou syntaxi: %~I - Rozvine %I a odebere okolní uvozovky ("). %~fI - Rozvine %I na úplnou cestu. %~dI - Rozvine %I pouze na písmeno jednotky. %~pI - Rozvine %I pouze na cestu. %~nI - Rozvine %I pouze na název souboru. %~xI - Rozvine %I pouze na příponu souboru. %~sI - Rozvinutá cesta obsahuje pouze krátké názvy. %~aI - Rozvine %I na atributy souborů. %~tI - Rozvine %I na datum a čas vytvoření souboru. %~zI - Rozvine %I na velikost souboru. %~$PATH:I - Prohledá adresáře uvedené v systémové proměnné PATH a rozvine %I na úplný název prvního nalezeného souboru. Jestliže název systémové proměnné není definován nebo soubor není nalezen, bude tento modifikátor rozvinut na prázdný řetězec. Modifikátory lze kombinovat a získat tak složené výsledky: %~dpI - Rozvine %I pouze na písmeno jednotky a cestu. %~nxI - Rozvine %I pouze na název a příponu souboru. %~fsI - Rozvine %I na úplnou cestu pouze s krátkými názvy. %~dp$PATH:i - Vyhledá %I v adresářích uvedených v systémové proměnné PATH a rozvine %I na písmeno jednotky a cestu prvního nalezeného souboru. %~ftzaI - Rozvine %I na výstup ve formátu výstupu příkazu DIR. Proměnné %I a PATH lze ve výše uvedených příkladech nahradit jinými platnými hodnotami. Syntaxe %~ je ukončena platným názvem proměnné příkazu FOR. Používání velkých písmen v názvech proměnných (například %I) usnadňuje čtení příkazů a zabraňuje záměně s modifikátory, v nich se velká a malá písmena nerozlišují.