Skip to main content

leere Doppel-Ordner

Ich bin mit meinem Nextcloud umgezogen, beim neuen Anbieter hatte der Client leere Ordner erstellt, welche den gleichen Namen des vorherigen Ordners trugen... Mag ein Bug gewesen sein

Generator: Claude Sonnet 4.5

Script starten, Ordnerpfad angeben, dann wird gelistet welche Ordner es trifft (leere Ordner die den gleichen Namen des vorherigen Ordners tragen) und deren Löschung wird angeboten.

Die Löschung ist permanent. Technisch gesehen ist das Löschen von Windows in der GUI ein Verschieben in den Papierkorb. Wollt ihr das müsst ihr das Script von Claude anpassen lassen.

# Nextcloud - Leere doppelte Unterordner finden und löschen
# Findet Ordner, die den gleichen Namen wie ihr Elternordner haben und leer sind

# Farben für bessere Lesbarkeit
function Write-ColorOutput($ForegroundColor) {
    $fc = $host.UI.RawUI.ForegroundColor
    $host.UI.RawUI.ForegroundColor = $ForegroundColor
    if ($args) {
        Write-Output $args
    }
    $host.UI.RawUI.ForegroundColor = $fc
}

Write-Host "`n=== Nextcloud Ordner-Bereinigung ===" -ForegroundColor Cyan
Write-Host "Suche nach leeren Ordnern, die den gleichen Namen wie ihr Elternordner haben...`n" -ForegroundColor Yellow

# Frage nach dem zu durchsuchenden Pfad
$StartPath = Read-Host "Bitte gib den zu durchsuchenden Ordnerpfad ein"

# Prüfe ob Pfad existiert
if (-not (Test-Path $StartPath)) {
    Write-Host "`nFEHLER: Der Pfad '$StartPath' existiert nicht!" -ForegroundColor Red
    Read-Host "`nDrücke Enter zum Beenden"
    exit
}

# Finde alle Ordner rekursiv
$allFolders = Get-ChildItem -Path $StartPath -Directory -Recurse -ErrorAction SilentlyContinue

# Array für problematische Ordner
$duplicateFolders = @()

# Durchsuche alle Ordner
foreach ($folder in $allFolders) {
    $parentFolder = Split-Path $folder.FullName -Parent
    $parentFolderName = Split-Path $parentFolder -Leaf
    $currentFolderName = $folder.Name
    
    # Prüfe ob der Ordnername gleich dem Elternordner ist
    if ($currentFolderName -eq $parentFolderName) {
        # Prüfe ob der Ordner leer ist (keine Dateien und keine Unterordner)
        $itemCount = (Get-ChildItem -Path $folder.FullName -Force -ErrorAction SilentlyContinue | Measure-Object).Count
        
        if ($itemCount -eq 0) {
            $duplicateFolders += [PSCustomObject]@{
                Pfad = $folder.FullName
                Name = $currentFolderName
                Elternordner = $parentFolderName
            }
        }
    }
}

# Zeige Ergebnisse
if ($duplicateFolders.Count -eq 0) {
    Write-Host "✓ Keine problematischen leeren Ordner gefunden!" -ForegroundColor Green
    exit
}

Write-Host "Gefundene leere Ordner mit doppeltem Namen:" -ForegroundColor Yellow
Write-Host ("=" * 80) -ForegroundColor Gray

$counter = 1
foreach ($dup in $duplicateFolders) {
    Write-Host "`n[$counter] " -NoNewline -ForegroundColor Cyan
    Write-Host "Ordnername: " -NoNewline -ForegroundColor White
    Write-Host "$($dup.Name)" -ForegroundColor Yellow
    Write-Host "    Pfad: " -NoNewline -ForegroundColor White
    Write-Host "$($dup.Pfad)" -ForegroundColor Gray
    $counter++
}

Write-Host "`n" -NoNewline
Write-Host ("=" * 80) -ForegroundColor Gray
Write-Host "`nGesamt: " -NoNewline -ForegroundColor White
Write-Host "$($duplicateFolders.Count) leere Ordner gefunden" -ForegroundColor Yellow

# Frage ob gelöscht werden soll
Write-Host "`n"
$confirmation = Read-Host "Möchtest du diese Ordner LÖSCHEN? (ja/nein)"

if ($confirmation -eq "ja" -or $confirmation -eq "j" -or $confirmation -eq "yes" -or $confirmation -eq "y") {
    Write-Host "`nLösche Ordner..." -ForegroundColor Yellow
    
    $successCount = 0
    $errorCount = 0
    
    foreach ($dup in $duplicateFolders) {
        try {
            Remove-Item -Path $dup.Pfad -Force -ErrorAction Stop
            Write-Host "✓ Gelöscht: " -NoNewline -ForegroundColor Green
            Write-Host "$($dup.Pfad)" -ForegroundColor Gray
            $successCount++
        }
        catch {
            Write-Host "✗ FEHLER bei: " -NoNewline -ForegroundColor Red
            Write-Host "$($dup.Pfad)" -ForegroundColor Gray
            Write-Host "  Grund: $($_.Exception.Message)" -ForegroundColor Red
            $errorCount++
        }
    }
    
    Write-Host "`n" -NoNewline
    Write-Host ("=" * 80) -ForegroundColor Gray
    Write-Host "`nErgebnis:" -ForegroundColor Cyan
    Write-Host "  Erfolgreich gelöscht: " -NoNewline -ForegroundColor White
    Write-Host "$successCount" -ForegroundColor Green
    if ($errorCount -gt 0) {
        Write-Host "  Fehler: " -NoNewline -ForegroundColor White
        Write-Host "$errorCount" -ForegroundColor Red
    }
}
else {
    Write-Host "`nAbgebrochen. Keine Ordner wurden gelöscht." -ForegroundColor Yellow
}

Write-Host "`n" -ForegroundColor White