Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/www/novacisko.cz/subdomains/bredy/init.php on line 11

Warning: mysql_connect(): Headers and client library minor version mismatch. Headers:50562 Library:100020 in /home/www/novacisko.cz/subdomains/bredy/init.php on line 11

Warning: Cannot modify header information - headers already sent by (output started at /home/www/novacisko.cz/subdomains/bredy/init.php:11) in /home/www/novacisko.cz/subdomains/bredy/index.php on line 38
Možnosti "DOSového" příkazu FOR - Bredyho blog - Ondřej Novák
Bredyho blog - Ondřej Novák

Možnosti "DOSového" příkazu FOR

Příkaz FOR byl v DOSu použit pro vykonávání jednoho příkazu na blok souborů. Tento příkaz však umí mnoho, i když se to moc neví.


FOR %proměnná IN (množina) DO příkaz [parametry-příkazu]

%proměnná Určuje proměnný parametr.
(množina) Určuje množinu souborů. Lze použít i zástupné znaky.
příkaz Určuje příkaz, který se má provést 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 napsat %%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 zapnuty doplňky 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 se porovnávat 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 <začátek> do <konec> po <krok>. 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           - poznámkový znak konce řádku
(pouze jeden)
skip=n - počet řádků, které mají být vynechány
na začátku souboru.
delims=xxx - sada oddělovačů (nahrazuje výchozí sadu
oddělovačů tvořenou mezerou a tabulátorem).
tokens=x,y,m-n - 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 - oznamuje 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 u názvů proměnných příkazu

FOR záleží na velikosti písmen, 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.

A nakonec - příkaz FOR /F je možné použít k analýze výstupu příkazu. Dosáhnete toho uzavřením skupiny 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í.

(Převzato z helpu FOR /?)

vytvořeno: 26.1.2007 19:21:21, změněno: 26.1.2007 19:42:52
Jsou informace v článku pro Vás užitečné?
  • (1)
  • (0)
  • (0)
  • (0)
  • (1)

Podobné články

Integrace Subversion do Microsoft Visual Studio

Ovládejte Subversion přímo z prostředí Visual Studia. Následující návod vám ukáže jak

Jak provést operaci až po příkazu return

Pokud optimalizujeme kód tak, abychom mohli využít výhod vracení objektu z funkce, narazíme občas na problém, kterak provést některé operace až po provedení příkazu return

Multithreading v C++ (ve Win32) II - ThreadHook

Pokračování dokumentace k Multithreading v C++ (ve Win32)

Spekulace s futures - hra začíná

Tak podobné symboly, jako jsou zobrazeny na obrázku vedle tohoto odstavečku budu teď vídat často, skoro denně. Začal jsem si pohrávat s možností investování na burzách s futures. Zatím jen na simulátoru.

Základy komunikace mezi procesy (ve Windows)

Od počátku Windows95 jsou procesy v paměti oddělené. Každý proces je vlastně svým světem sám pro sebe. Jak tedy mohou komunikovat procesy mezi sebou? Podrobný výčet možností...
Reklama: