usuwanie pustych folderów – łatwo z Windows PowerShell

Ze skryptu PowerShell można szukać w ścieżce systemu plików rekurencyjnie dla pustych katalogów i je usunąć.

W systemie plików, chodzi co jakiś czas do pustych katalogów - albo dlatego, że przypadkowo stworzył je lub nie mają teraz więcej treści. dla pustych folderów w Eksploratorze Windows nie ma wbudowanej funkcji wyszukiwania. Istnieją specjalne narzędzia do takich "Usuń pustych katalogów" John Jones. Ale kto chce instalować żadnego specjalnego oprogramowania dla tego zadania, można użyć następującego skryptu PowerShell. Usuwa cały folder pusty system plików w określonej ścieżce. Tutaj droga jest poszukiwany rekurencyjnie. Parametr -force w Get-ChildItem (AKA: ty) używany do ukryte pliki i foldery są wykrywane i foldery nie są usuwane, gdy tylko ukryte elementy są włączone.

###########################################
# Usuń pusty folder systemu plików w ścieżce (rekurencyjnie)
# (C) Dr. Holger Schwichtenberg, www.IT-Visions.de
###########################################

# Dane wejściowe
$ Root = "t: \ projekty-archiwum"
$ Logfile = "c: \ temp \ Puste foldery usunąć log.txt"
[Int] $ AnzGelöschteOrdner = 0

Funkcja Remove-Empty Folder ($ path)
{
Lista $ = $ ścieżka -LiteralPath -file -Force
$ File = $ list.count
$ Subdirs = reż -LiteralPath $ ścieżka -directory -Force

foreach ($ podkat w $ podkatalogów)
{
$ File = $ plików + (Remove-Empty Folder $ subdir.fullname)
}
Write-gadatliwy "$ PATH: $ plików"
if ($ plik -eq0)
{
Write-gospodarza "==> Usuwanie pustych folderów: $ PATH"
rd -LiteralPath $ ścieżka -recurse Siła
$ Script: AnzGelöschteOrdner ++
Dodatek Content-Path wartość $ logfile $ path
}

return $ plików
}

## Główny program
Write-Host "Wyszukiwanie pustych folderów w $ korzeń ścieżki"
$ Subdirs = $ dir korzeń -directory -Force

foreach ($ podkat w $ podkatalogów)
{
Remove-Empty Folder $ subdir.fullname | z null
}
Write-Host "Folder $ AnzGelöschteOrdner usunięte!"

Usunięte ścieżki są zapisywane w pliku dziennika. Może to być wykorzystane później, gdy trzeba ponownie utworzyć folder systemu plików. W tym celu, po jednym-liner wystarczy.

Get-Content "t: \ Puste foldery löschen.txt" | gdzie {$ _ -ne $ null} | foreach {$ _ md -ErrorAction SilentlyContinue}

Parametr -ErrorAction jest ustawiony na SilentlyContinue bo tam jest inaczej komunikaty o błędach, gdy istnieje już folder nadrzędny, ponieważ został utworzony automatycznie podczas tworzenia podfolder.