Két módszer üres könyvtárak gyors törlésére

2017. augusztus 18. - Office Guru

Újabb olvasói kérdés kerül feltérképezésre a következő posztban, méghozzá egy olyan, amelynek megoldása valószínűleg sokak számára segítség lenne, ha egyáltalán ilyen feladatok esetén felmerülne ötletként az automatizálás/nagyobb csomagban történő végrehajtás. A kérdés alapvetően VBA-ra irányul, méghozzá arra, hogy hogyan lehet Excelből egy bizonyos könyvtár összes üres alkönyvtárát törölni.

Mielőtt rátérnénk az Excelre, azért meg kell említeni, hogy van ennél egyszerűbb megoldás is, méghozzá a parancssor használata. Windows 7 esetében a Start menü keresőmezőjébe írjuk be, hogy cmd és nyissuk meg a parancssort, majd szimplán a következő paranccsal hajtsuk végre, amit szeretnénk:

robocopy c:\officeguru\proba c:\officeguru\proba /S /MOVE

Alapvetően a Robust File Copy nagy mennyiségű fájl mozgatásában segítene, de kihasználjuk azt a lehetőséget, hogy a /S paraméterrel ki tudjuk kapcsolni az üres folderek másolását - azaz az elsőként megadott könyvtárból a másodikként megadott könyvtárba (tehát konkrétan ugyanoda) másolja a nem üres foldereket. Ha pedig a /MOVE paramétert is hozzátesszük, akkor mozgatni fog a parancs, tehát nem másol - így látható, hogy hogyan fogjuk elérni a megfelelő eredményt.

folders0.JPGMindenesetre ettől függetlenül fókuszáljunk kedves Olvasónk kérdésére, azaz nézzük meg, hogy VBA-ban hogy oldjuk meg ezt a problémát.

Adott tehát három folder a proba mappánkban, ebből kettőben nincs semmi, egyben pedig van egy fájl. Értelemszerűen a két üres könyvtárat akarjuk törölni:

folders1.JPG

Első lépésként a VBA-editorba lépünk ALT+F11 billentyűkombinációval, majd nekilátunk a kódunknak, méghozzá a változók definiálásával. Rövid kódsorunk magját és legfontosabb elemét a FileSystemObject objektum adja, amely objektumalapú lehetőséget ad számunkra, hogy hozzáférjünk a számítógépünk fájlrendszeréhez. Egyszerűen csak létre kell hoznunk egy FileSystemObject objektumot VBA-ban a Scripting.FileSystemObject szintaxis segítségével, aztán már törölhetünk, beolvashatunk vagy akár létre is hozhatunk fájlokat. Hogy jól tudjuk használni a szintaxist, érdemes megjegyezni, hogy a FileSystemObject a Microsoft Scripting Runtime Libraryben található dll-ként.

Sub konyvtartorles()
Dim fso As Scripting.FileSystemObject
Dim fokonyvtar As Scripting.Folder
Dim alkonyvtar As Scripting.Folder

FSO a fentebb már említett FileSystemObject objektum, amelyet azért hozunk létre, hogy hozzáférjünk a fájlrendszerhez, majd be is állítjuk az FSO objektumot:

Set fso = New Scripting.FileSystemObject

"fokonyvtar" és "alkonyvtar" változóknak már a neve magáért beszél, hogy mire fog szolgálni, most szépen defináltuk őket folderként. Ezután defináljuk a főkönyvtárunk útvonalát:

fokonyvtarut = "C:\proba"

Majd beállítjuk a fokonyvtar változót a FileSystemObject.GetFolder metódus segítségével, amely metódus egy folder objektumot ad vissza eredményül.

Set fokonyvtar = fso.GetFolder(fokonyvtarut)

Ezután már csak egy For Each...Next ciklus van hátra, amelyben megnézzük, hogy a főkönyvtárunk összes alkönyvtára közül melyikben vannak fájlok és melyikben nincsenek, majd töröljük az üreseket. Hasonlóan a fokonyvtarhoz, definiáljuk a subfolderek eléséri útját is, majd a GetFolder metódussal hivatkozunk is erre az objektumra. Ezt azért a ciklus belsejében tesszük meg, mert a jelenlegi kódban egyetlen főkönyvtár van, de bármennyi alkönyvtár lehet.

For Each alkonyvtar In fokonyvtar.SubFolders
utvonal = fokonyvtarut & "\" & alkonyvtar.Name
Set alkonyvtar = fso.GetFolder(utvonal)
If alkonyvtar.Files.Count = 0 Then alkonyvtar.Delete
Next alkonyvtar
End Sub

Ahogy látható, a subfoldereken egyesével fogunk végigmenni és megvizsgáljuk, hogy vannak-e benne fájlok, mert ha nincsenek (.files.count = 0), akkor az adott alkönyvtárat törölni fogjuk. És így megyünk tovább.

A bejegyzés trackback címe:

http://officeguru.blog.hu/api/trackback/id/tr6212761920

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben.

Nincsenek hozzászólások.