PowerShell: Smazání prázdných složek (adresářů)

Pokud ze složky odmažu staré soubory (např. pomocí forfiles) získám 😉 strom složek, z nichž některé jsou (možná) prázdné. Vyzkoušel jsem jeden způsob, jak se jich zbavit.

Nejprve tedy odmazání souborů starších 28 dnů (to jen pro pořádek a úplnost):

forfiles /p "cesta_k_hlavnímu_adresáři" /m *.* /s /d -28 /c "cmd /c del /f /q @path"

A teď smazání prázdných složek:

$destination = "cesta_k_hlavnímu_adresáři"
 
$loop_control_total = 0
do{
    $loop_control = 0
    $items = Get-ChildItem $destination -Recurse
    foreach( $item in $items ){
        if( $item.PSIsContainer ){
            $subitems = Get-ChildItem -Recurse -Path $item.FullName
            if( $subitems -eq $null ){
                "Remove item: " + $item.FullName
                Remove-Item $item.FullName -Recurse -Force
                $loop_control++
            }
            $subitems = $null
        }
    }
    $loop_control_total++
}until( $loop_control -eq 0 -or $loop_control_total -ge 10 )
  • $loop_control – pokud se něco smazalo, spustí se cyklus znovu (to je proto, aby se odmazala nadřazená složka, která možná zůstala prázdná)
  • $loop_control_total – celý cyklus proběhne max. třeba 10x (toto omezení je nutné, protože pokud by se nějakou složku nedařilo smazat (práva, dlouhá cesta, …) a vyhodnocovala by se stále jako prázdná, skript by uvízl v nekonečné smyčce)

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

*