5. díl - Práce se soubory a složkami 1/2

Ostatní jazyky Příkazový řádek a dávkové soubory Práce se soubory a složkami 1/2

V předchozím díle jsme se naučili, jak pracovat s podmínkami a jak větvit náš program. V tomto díle se podíváme na to, jak pracovat se soubory a složkami. Nejprve si řekneme něco o UAC, abychom se potom nedivili, proč nám ten zápis nefunguje :-).

Práva k zápisu v systémech Windows

Od Windows Vista existuje v systémech Windows tzv. UAC (User Account Control). Technologie zakazuje zápis na systémový oddíl disku (nejčastěji C:) v případě, že zápis není povolen administrátorem nebo že se nejedná o zápis do osobních složek uživatele. Toto opatření samozřejmě naplnilo diskuzní fóra o programování a rozbilo řadu aplikací. Důležité však je, že toto opatření je správné a pouze zabraňuje špatně napsaným aplikacím měnit co se jim zlíbí. Linuxové systémy mají podobná opatření již dlouhou dobu.

Koncepce systému Windows zahrnuje uživatelské účty. Každý uživatelský účet je realizován složkou (většinou C:\Users\jmeno_u­zivatele). Tato složka obsahuje mimo jiné dokumenty, pracovní plochu a také tzv. složku s daty aplikací - AppData. K této složce se lze dostat při zadání proměnné %appdata% do cesty. Zkuste si %appdata% napsat do cesty Průzkumníka a složku otevřít. Uvidíte, že ve složce má své podsložky mnoho aplikací, které máte nainstalovány. Právě zde je místo pro nastavení vašich aplikací a další data. Vaše aplikace si zde samozřejmě vytvoří složku se svým jménem a do té si bude vše ukládat. Složka %appdata% míří vždy k AppData aktuálně přihlášeného uživatele.

Velkou chybou bylo, že si programy ukládaly data do složky s programem. Program na ploše nebo na starých Windows fungoval, nicméně když se poté nainstaloval do složky Program Files na disku C, spadl s chybou při zápisu na disk. Problém lze samozřejmě obejít tím, že aplikaci spustíme jako správce, ale to je špatné řešení.

Příprava složky

Když už víme, co je to složka AppData, můžeme si v ní vytvořit nějakou složku pro náš prográmek. Jak bylo zmíněno u UAC, cesta ke složce AppData je uložená v systémové proměnné %appdata% (více v 3. lekci). To je ale nepraktické, protože pokaždé budeme muset dopisovat název naší složky za tuto proměnnou. Proto si vytvoříme další proměnnou, do které si uložíme cestu do AppData a do naší složky.

set cestaAppdata=%appdata%\ITnetworkBatch

Nyní máme celou cestu v proměnné %cestaAppdata% a můžeme se vrhnout na vytváření složky.

Existence složky

Na začátku našeho programu by bylo dobré zjistit, zda složka již existuje - abychom ji nevytvářeli dvakrát. Zjišťování, zda soubor nebo složka existuje se provádí pomocí nám již známého příkazu:

if

Jen s tím rozdílem, že za něj nebudeme psát proměnnou ale klíčové slovo EXIST a název složky/souboru. Příkaz tedy bude vypadat takto:

if exist <složka> <akce> else <akce>

V našem případě ale potřebujeme provést akci pokud složka neexistuje (vytvořit ji), proto za IF doplníme klíčové slovo NOT:

if not exist <složka> <akce> else <akce>

V našem případě tedy příkaz bude vypadat následovně:

if not exist %cestaAppdata% (<vytvoření složky>)

Vytváření složky

Vytváření složky se v Batchi provádí pomocí příkazu MKDIR, případně pomocí jeho zkrácené verze MD.

mkdir <cesta ke složce>

Upravíme si proto náš příkaz IF, aby nám vytvořil složku:

if not exist %cestaAppdata% (mkdir %cestaAppdata%)

Pokud se pak podíváme do AppData, zjistíme, že tam máme novou složku.

Změna aktuální složky

Pokud budeme pracovat v naší aplikaci pracovat pouze se složkou AppData, budeme pořád muset psát naši proměnnou do cesty. Tomuto se můžeme vyhnout změnou aktuální složky. Ta se provádí pomocí příkazu CHDIR, případně pomocí jeho zkrácené verze CD. Pokud spustíme příkaz:

cd %cestaAppdata%

Změní se aktuální složka na naši složku v AppData a můžeme s ní pracovat přímo. Například pokud teď vytvoříme další složku, nevytvoří se ve složce s programem ale v naší složce v AppData.

Přejmenování složky

Přejmenování složky nebo souboru se provádí pomocí příkazu REN. Nezapomeňte zadat příponu.

ren puvodni_nazev novy_nazev

Smazání složky

Mazání složky se provádí pomocí příkazu RMDIR, případně pomocí jeho zkrácené verze RD.

rmdir nazev_slozky

Zde ale můžeme narazit na problém. Pokud chceme adresář smazat, musí být prázdný. Pokud není, vyhodí hlášení “Adresář není prázdný”.

K této akci slouží přepínač /S, který vynutí smazání složky včetně všech podsložek a souborů které obsahuje.

rmdir nazev_slozky /S

Pokud si tento příkaz spustíte, zjistíte, že se nás příkaz ptá, zda složku opravdu chceme smazat. To může být v dávkových souborech nepříjemné. Od toho tu je přepínač /Q, který se nebude ptát a složku rovnou smaže.

rmdir nazev_slozky /Q

Tyto přepínače můžeme také kombinovat.

rmdir nazev_slozky /Q /S

Mimochodem, složku Windows se Vám smazat nepovede, nezapomínejte na UAC :-).

Výpis stromové struktury a obsahu složky

Obsah složky můžeme vypsat pomocí příkazu DIR:

dir slozka

nebo

dir

pro výpis obsahu aktuální složky.

Stromovou strukturu “vykreslíme” pomocí příkazu:

tree slozka

nebo

tree

pro výpis aktuální složky.

V dalším díle se podíváme na práci s textovými soubory.


 

  Aktivity (1)

Článek pro vás napsal Daniel Vítek
Avatar
Primárně PHP programátor, rád si hraje s Arduinem a píše články do sekce Batch.

Jak se ti líbí článek?
Celkem (12 hlasů) :
4.254.254.254.25 4.25


 


Miniatura
Předchozí článek
Cvičení ke 4. lekci Batche
Miniatura
Všechny články v sekci
Příkazový řádek a dávkové soubory

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!