Lekce 5 - Práce se soubory a složkami 1/2
V předešlém cvičení, Řešené úlohy ke 4. lekci Batche, jsme si procvičili nabyté zkušenosti z předchozích lekcí.
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_uzivatele). 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.