Leere Ordner löschen

Vor kurzem habe ich meine Musikbibliothek auf dem Computer etwas aufgeräumt und viele Titel gelöscht, die ich eigentlich nie wirklich gehört habe. Da das Programm (Zune) aber nur die MP3 Dateien gelöscht hat, blieben viele leere Ordner auf der Festplatte zurück, die eigentlich gar nicht mehr gebraucht wurden.
Um nicht selbst jeden Ordner einzeln zu Suchen und zu löschen habe ich mir ein kleines PowerShell Script geschrieben, das automatisch nach leeren Ordnern sucht und sie löscht.

Function Remove-EmptyFolders() {
[CmdletBinding()]
    Param(
    [Parameter(Mandatory=$true,HelpMessage="Path including subfolders to analyze for empty folders")]
    $Path
    )

    Function checkEmpty([String] $Path) {
        if ((Get-ChildItem -Force -LiteralPath "$Path") -eq $null) {
            return $true;
        } else {
            return $false;
        }
    }

    if (checkEmpty "$Path") {
        (Get-Item -Force -LiteralPath "$Path").Delete()
        Write-Host -ForegroundColor Red "$Path deleted"
    } else {
        $Folders = Get-ChildItem -Force -LiteralPath "$Path" -Directory

        foreach ($Folder in $Folders) {
            Remove-EmptyFolders "$Path/$Folder"
        }
    }
}

Remove-EmptyFolders "H:\MP3"

In der letzten Zeile wird die Funktion mit dem gewünschten Pfad aufgerufen.

Zu beachten ist vielleicht noch, dass Ordner, die durch das Löschen eines Unterordners nun leer geworden sind, nicht auch sofort gelöscht werden. Es empfiehlt sich daher das Script so oft hintereinander zu starten, bis keine leeren Ordner mehr gefunden wurden.

Über Markus Ressel

Hallo, ich bin Markus. Ohne Technik würde ich in Depressionen verfallen, Musik hören und machen hält mich am leben und Sport sorgt noch für ein wenig körperliche Fitness.
Dieser Beitrag wurde unter Software, Tech abgelegt und mit , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

4 Kommentare zu Leere Ordner löschen

  1. Jörg Hofmann sagt:

    Das Skript kann folgendermaßen angepasst werden, damit man die Funktion nur 1x aufrufen muss:

    Function Remove-EmptyFolders() {
    [CmdletBinding()]
    Param(
    [Parameter(Mandatory=$true,HelpMessage=“Path including subfolders to analyze for empty folders“)]
    $Path
    )
    $VerbosePreference = „Continue“
    $ConfirmPreference = „None“
    Function checkEmpty([String] $Path) {
    if ((Get-ChildItem -Force -LiteralPath „$Path“) -eq $null) {
    return $true;
    } else {
    return $false;
    }
    }

    if (checkEmpty „$Path“) {
    (Get-Item -Force -LiteralPath „$Path“).Delete()
    Write-Verbose „$Path deleted“
    } else {
    $Folders = Get-ChildItem -Force -LiteralPath „$Path“ -Directory

    foreach ($Folder in $Folders) {
    Remove-EmptyFolders „$Path/$Folder“
    }
    (Get-Item -Force -LiteralPath „$Path“).Delete()
    Write-Verbose „$Path deleted“
    }
    }

  2. Pingback: Wie Ordner in der 2. Ebene, die nur einen Unterordner haben, entfernen?

  3. Saira sagt:

    Vielen Dank für das Script!
    Ich habe, damit es durchläuft bis kein leerer Ordner mehr gefunden wird wie folgt angepasst:

    Folgende if-Verzweigung ergänzt:
    if (checkEmpty „$Path“)
    {
    (Get-Item -Force -LiteralPath „$Path“).Delete()
    Write-Host „$Path deleted“
    return $true
    }
    else …

    Und die Funktion dann wie folgt aufgerufen:
    Do{
    $test = Remove-EmptyFolders $Quelle
    }Until($test -ne $true)

  4. Satir sagt:

    Danke für das Script.
    Ich habe es ein wenig umgebaut. Primär hat mit der Name der Funktion CheckEmpty nicht gefallen. Dieses heißt bei mir jetzt Test-Empty.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.