495 Stimmen

Wie wird ein ganzes Verzeichnis mit PowerShell 2.0 rekursiv gelöscht?

Was ist die einfachste Methode, um ein Verzeichnis und alle seine Unterverzeichnisse in PowerShell zu löschen? Ich verwende PowerShell V2 unter Windows 7.

Ich habe aus verschiedenen Quellen erfahren, dass der offensichtlichste Befehl, Remove-Item $targetDir -Recurse -Force funktioniert nicht richtig. Dazu gehört auch eine Aussage in der PowerShell V2-Online-Hilfe (zu finden über Get-Help Remove-Item -Examples ), die besagt:

...Da der Recurse-Parameter in diesem Cmdlet fehlerhaft ist, verwendet der Befehl das Cmdlet "Get-Childitem", um die gewünschten Dateien abzurufen, und übergibt sie mit dem Pipelineoperator an das Cmdlet "Remove-Item"...

Ich habe verschiedene Beispiele gesehen, die Folgendes verwenden Get-ChildItem und leiten es an Entfernen-Element aber die Beispiele entfernen in der Regel eine Reihe von Dateien auf der Grundlage eines Filters, nicht das gesamte Verzeichnis.

Ich bin auf der Suche nach dem saubersten Weg, um ein ganzes Verzeichnis, Dateien und untergeordnete Verzeichnisse auszublasen, ohne irgendwelche Benutzerwarnungen zu generieren und dabei so wenig Code wie möglich zu verwenden. Ein Einzeiler wäre schön, wenn er leicht zu verstehen ist.

14voto

steve Punkte 127

Versuchen Sie dieses Beispiel. Wenn das Verzeichnis nicht existiert, wird kein Fehler ausgegeben. Sie benötigen möglicherweise PowerShell v3.0.

remove-item -path "c:\Test Temp\Test Folder" -Force -Recurse -ErrorAction SilentlyContinue

10voto

Verwenden Sie den altbewährten DOS-Befehl:

rd /s <dir>

10voto

Dejan Punkte 7559

Um die "Das Verzeichnis ist nicht leer"-Fehler der akzeptierten Antwort zu vermeiden, verwenden Sie einfach den guten alten DOS-Befehl, wie zuvor vorgeschlagen. Die vollständige PS-Syntax zum Kopieren und Einfügen lautet:

& cmd.exe /c rd /S /Q $folderToDelete

9voto

jdoose Punkte 423

Aus irgendeinem Grund hat die Antwort von John Rees in meinem Fall manchmal nicht funktioniert. Aber sie führte mich in die folgende Richtung. Zuerst versuche ich, das Verzeichnis rekursiv mit der fehlerhaften Option -recurse zu löschen. Danach steige ich in jedes Unterverzeichnis hinab, das übrig ist, und lösche alle Dateien.

function Remove-Tree($Path)
{ 
    Remove-Item $Path -force -Recurse -ErrorAction silentlycontinue

    if (Test-Path "$Path\" -ErrorAction silentlycontinue)
    {
        $folders = Get-ChildItem -Path $Path –Directory -Force
        ForEach ($folder in $folders)
        {
            Remove-Tree $folder.FullName
        }

        $files = Get-ChildItem -Path $Path -File -Force

        ForEach ($file in $files)
        {
            Remove-Item $file.FullName -force
        }

        if (Test-Path "$Path\" -ErrorAction silentlycontinue)
        {
            Remove-Item $Path -force
        }
    }
}

5voto

Gajendra D Ambi Punkte 3270
del <dir> -Recurse -Force # I prefer this, short & sweet

OR

remove-item <dir> -Recurse -Force

Wenn Sie ein großes Verzeichnis haben, mache ich normalerweise folgendes

while (dir | where name -match <dir>) {write-host deleting; sleep -s 3}

Führen Sie dies auf einem anderen Powershell-Terminal aus und es wird beendet, wenn es fertig ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X