Leere Ordner löschen

Posted on: 26. Februar 2019
Hier der Blogbeitrag zum Video mit allen Zusatzinfos, Scripts und Kommentaren.
Willst du schnell eine grosse Anzahl leerer Ordner finden und löschen? Hier schauen wir uns einen Mechanismus in Zusammenarbeit mit .NET und PowerSHELL an um ruck zuck unser Anliegen zu erledigen. Ebenfalls kannst du das Mindestalter angeben, ab dem die leeren Ordner gelöscht werden können.

Falls du Wünsche oder Anregungen hast, dann verwende bitte das: Input-Formular
Am einfachsten schaust du das Video und hast dazu diesen Code offen. So kannst du auch den Code in deiner gewünschten Grösse darstellen und kannst dem Video einfacher folgen.
——————————————–
# Startzeit zur Zeitberechnung                        
$Startzeit = get-date                        
                        
# Ausagangspfad                        
$RootPfad = "C:\Script\LeereOrdner"                        
            
# LogDatei            
$LogDatei = "C:\Script\LogOrdnerLoeschen.txt"            
                        
# Ordner jünger als diese Tage werden nicht berücksichtig                        
$MinOrdnerAlterTage = 0                        
                        
# Alle Ordner auflisten: RelTiefe = Relative Tiefe ausgehend vom RootPath, AbsTiefe = Absolute Tiefe des ganzen Ordnerpfades, AnzDateien = Anzahl Dateien innnerhalb des Ordners                        
$RootTiefe = $RootPfad.Split("\").Count # Tiefe des RootPfades                        
Write-Host "$(Get-Date -Format "HH:mm:ss") Alle Unterordner aus RootPfad finden..." -ForegroundColor Cyan                        
$AlleOrdner = [System.IO.Directory]::GetDirectories($RootPfad,'*.*','AllDirectories') | `
select @{Label="Fullname";Expression={$_}},`
@{Label="RelTiefe";Expression={$_.split("\").count - $RootTiefe}},`
@{Label="AbsTiefe";Expression={$_.split("\").count}},`
@{Label="AnzDateien";Expression={(Get-ChildItem $_ -File).count}},`
@{Label="LastWriteTime";Expression={(Get-Item $_).LastWriteTime}} | Sort-Object RelTiefe -Descending                        
                        
# Testen ob Ordner leer ist und verarbeiten                        
$AnzGeloescht = 0                        
$VerarbeiteteOrdner = 0                        
$GeloeschteOrdner = @()                        
Write-Host "$(Get-Date -Format "HH:mm:ss") Ordner werden verarbeitet..." -ForegroundColor Cyan                        
                        
for ($i = 0;$i -lt $AlleOrdner.Count; $i ++)                        
{                        
    # Write-Host "Verarbeitung $VerarbeiteteOrdner\$($AlleOrdner.Count)" -ForegroundColor Cyan                        
    if ((Get-ChildItem $AlleOrdner[$i].Fullname -File -Recurse).count -eq 0 -and ((Get-Date) - (Get-Date $AlleOrdner[$i].LastWriteTime)).TotalDays -ge $MinOrdnerAlterTage)                        
    {                        
        $GeloeschteOrdner += $AlleOrdner[$i].Fullname                        
        Remove-Item $AlleOrdner[$i].Fullname -Recurse -ErrorAction Ignore -Confirm:$false                        
        $AnzGeloescht ++                        
    }                        
                        
    $VerarbeiteteOrdner ++                        
}                        
                        
# Gelöschte Ordner berechnen                        
$UebrigeOrdner = $VerarbeiteteOrdner - $AnzGeloescht                        
            
# LogDatei ergänzen            
Add-Content -Path $LogDatei -Value $GeloeschteOrdner            
                        
# Ausgabe des Ergebnisses                        
Write-Host "Es wurden $AnzGeloescht Ordner gelöscht, maximale Tiefe $(($AlleOrdner | Measure-Object -Maximum AbsTiefe).Maximum), Total verarbeitete Ordner $VerarbeiteteOrdner, übrige Ordner $UebrigeOrdner  in $([Math]::Round(((Get-Date) - $Startzeit).TotalMinutes,2)) Minuten" -ForegroundColor Yellow            

——————————————–

Normalerweise versuche ich die Videos relativ kurz zu halten und schreibe wichtige Informationen direkt als #Kommentar im Blog-Beitrag dazu.
Falls du spezielle Anforderungen an Scripts oder Auftragsarbeiten hast, kannst du mich gerne direkt per Email erreichen. Alle Infos dazu sind hier Kontakt
Ich hoffe du verstehst, dass ich nur Videos zu Themen machen kann, die ein grösseres Interesse von verschiedenen Leuten haben. Benutzerspezifische Scripts erstelle ich ausschliesslich als Auftragsarbeiten oder im Mandat.

Ich erstelle und veröffentliche sämtliche Videos kostenlos und blende auch keine Werbung ein, dies will ich auch so beibehalten. Da das vermittelte Wissen aber in teuren Kursen erlangt werden könnte, ist eine kleine Spende hin und wieder sicher keine schlechte Gegenleistung.