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 od do 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í.