5. diel - Práca so súbormi a priečinkami 1/2
V predchádzajúcom cvičení, Cvičenie k 4. lekcii Batch, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.
V predchádzajúcom diele sme sa naučili, ako pracovať s podmienkami a ako vetviť náš program. V tomto diele sa pozrieme na to, ako pracovať so súbormi a zložkami. Najprv si povieme niečo o UAC, aby sme sa potom nečudovali, prečo nám ten zápis nefunguje .
Práva na zápis v systémoch Windows
Od Windows Vista existuje v systémoch Windows tzv. UAC (User Account Control).
Technológia zakazuje zápis na systémovej oblasti disku (najčastejšie C v prípade, že zápis nie je
povolený administrátorom alebo že sa nejedná o zápis do osobných
priečinkov používateľa. Toto opatrenie samozrejme naplnilo diskusné fóra o
programovaní a rozbilo rad aplikácií. Dôležité však je, že toto
opatrenie je správne a iba zabraňuje zle napísaným aplikáciám meniť čo
sa im zapáči. Linuxové systémy majú podobné opatrenia už dlhú dobu.
Koncepcia systému Windows zahŕňa používateľské kontá. Každý užívateľský účet je realizovaný zložkou (väčšinou C: \ Users \ ID užívateľa). Táto zložka obsahuje okrem iného dokumenty pracovnú plochu a tiež tzv. Zložku s dátami aplikácií - AppData. K tejto zložke sa možno dostať pri zadaní premennej% appdata% do cesty. Skúste si% appdata% napísať do cesty Prieskumníka a zložku otvoriť. Uvidíte, že v zložke má svoje podpriečinky mnoho aplikácií, ktoré máte nainštalované. Práve tu je miesto pre nastavenie vašich aplikácií a ďalšie dáta. Vaše aplikácie si tu samozrejme vytvorí zložku so svojim menom a do tej si bude všetko ukladať. Zložka% appdata% mieri vždy k AppData aktuálne prihláseného používateľa.
Veľkou chybou bolo, že si programy ukladali dáta do zložky s programom. Program na ploche alebo na starých Windows fungoval, však keď sa potom nainštaloval do priečinka Program Files na disku C, spadol s chybou pri zápise na disk. Problém možno samozrejme obísť tým, že aplikáciu spustíme ako správca, ale to je zlé riešenie.
Príprava zložky
Keď už vieme, čo je to zložka AppData, môžeme si v nej vytvoriť nejakú zložku pre náš programík. Ako bolo spomenuté u UAC, cesta k priečinku AppData je uložená v systémovej premennej% appdata% ( viac v 3. lekcii). To je ale nepraktické, pretože zakaždým budeme musieť dopisovať názov našej zložky tento ukazovateľ. Preto si vytvoríme ďalšiu premennú, do ktorej si uložíme cestu do AppData a do našej zložky.
set cestaAppdata=%appdata%\ITnetworkBatch
Teraz máme celú cestu v premennej% cestaAppdata% a môžeme sa vrhnúť na vytváraní zložky.
Existencie zložky
Na začiatku nášho programu by bolo dobré zistiť, či zložka už existuje - aby sme ju nevytvárali dvakrát. Zisťovanie, či súbor alebo priečinok existuje sa vykonáva pomocou nám už známeho príkazu:
if
Len s tým rozdielom, že zaň nebudeme písať premennú ale kľúčové slovo EXIST a názov priečinka / súboru. Príkaz teda bude vyzerať takto:
if exist <složka> <akce> else <akce>
V našom prípade však potrebujeme vykonať akciu ak priečinok neexistuje (vytvoriť ju), preto za IF doplníme kľúčové slovo NOT:
if not exist <složka> <akce> else <akce>
V našom prípade teda príkaz bude vyzerať nasledovne:
if not exist %cestaAppdata% (<vytvoření složky>)
Vytváraní priečinka
Vytváranie zložky sa v Batch vykonáva pomocou príkazu MKDIR, prípadne pomocou jeho skrátenej verzie MD.
mkdir <cesta ke složce>
Upravíme si preto náš príkaz IF, aby nám vytvoril zložku:
if not exist %cestaAppdata% (mkdir %cestaAppdata%)
Ak sa potom pozrieme do AppData, zistíme, že tam máme novú zložku.
Zmena aktuálnej zložky
Ak budeme pracovať v našej aplikácii pracovať len so zložkou AppData, budeme stále musieť písať našu premennú do cesty. Tomuto sa môžeme vyhnúť zmenou aktuálnej zložky. Tá sa vykonáva pomocou príkazu CHDIR, prípadne pomocou jeho skrátenej verzie CD. Ak spustíme príkaz:
cd %cestaAppdata%
Zmení sa aktuálny priečinok na našu zložku v AppData a môžeme s ňou pracovať priamo. Napríklad, ak teraz vytvoríme ďalšiu zložku, nevytvorí sa v zložke s programom ale v našej zložke v AppData.
Premenovanie zložky
Premenovanie priečinka alebo súboru sa vykonáva pomocou príkazu REN. Nezabudnite zadať príponu.
ren puvodni_nazev novy_nazev
Zmazanie zložky
Mazanie zložky sa vykonáva pomocou príkazu RMDIR, prípadne pomocou jeho skrátenej verzie RD.
rmdir nazev_slozky
Tu ale môžeme naraziť na problém. Ak chceme adresár zmazať, musí byť prázdny. Ak nie je, vyhodí hlásenie "Adresár nie je prázdny".
K tejto akcii slúži prepínač / S, ktorý vynúti zmazanie zložky vrátane všetkých podpriečinkov a súborov ktoré obsahuje.
rmdir nazev_slozky /S
Ak si tento príkaz spustíte, zistíte, že sa nás príkaz pýta, či zložku naozaj chceme zmazať. To môže byť v dávkových súboroch nepríjemné. Od toho tu je prepínač / Q, ktorý sa nebude pýtať a zložku rovno zmaže.
rmdir nazev_slozky /Q
Tieto prepínače môžeme tiež kombinovať.
rmdir nazev_slozky /Q /S
Mimochodom, zložku Windows sa Vám zmazať nepodarí, nezabúdajte na UAC .
Výpis stromovej štruktúry a obsahu zložky
Obsah priečinka môžeme vypísať pomocou príkazu DIR:
dir slozka
alebo
dir
pre výpis obsahu aktuálnej zložky.
Stromovú štruktúru "vykreslíme" pomocou príkazu:
tree slozka
alebo
tree
pre výpis aktuálnej zložky.
V ďalšom diele sa pozrieme na prácu s textovými súbormi.