So entfernen Sie leise ein Verzeichnis mit Inhalten in PowerShell

Antworten:

340
Remove-Item -LiteralPath "foldertodelete" -Force -Recurse
Michael Price
quelle
16
Ich habe festgestellt, dass ich dies zweimal ausführen muss, wenn es in einem Verzeichnis ausgeführt wird, das Unterverzeichnisse enthält. Beim ersten Mal treten viele Fehler "Das Verzeichnis ist nicht leer" auf. Das zweite Mal wird es ohne Fehler abgeschlossen.
Kristopher Johnson
1
Wenn ich nur den Inhalt eines Ordners löschen möchte, aber keinen Ordner löschen möchte?
Kiquenet
2
@ Kiquenet- Dies funktioniert für mich, wenn ich dem Pfad einen abschließenden Schrägstrich hinzufüge, sodass dieses Beispiel zu Remove-Item wird. \ Foldertodelete * -Force -Recurse
Adrian Carr
3
Wenn Sie möchten, dass ein fehlender Ordner ignoriert wird, können Sie ihn hinzufügen -ErrorAction Ignore. Dadurch werden jedoch auch andere Fehler ausgeblendet.
Tor Klingberg
2
@Kiquenet Dann können Sie Platzhalter verwenden, um alles in diesem Ordner zu entfernen : Remove-Item './folder/*'. Wenn Sie wirklich nur Dateien aller Ordner löschen möchten, können Sie alle Blätter auflisten und an das Cmdlet Remove-ItemGet-ChildItem -Recurse -File | Remove-Item
Michael Kargl
62

Aus PowerShell entfernen Antwort erzwingen : Hilfe Remove-Item sagt:

Der Recurse-Parameter in diesem Cmdlet funktioniert nicht ordnungsgemäß

Der Befehl zur Problemumgehung lautet

Get-ChildItem -Path $Destination -Recurse | Remove-Item -force -recurse

Und dann löschen Sie den Ordner selbst

Remove-Item $Destination -Force 
Michael Freidgeim
quelle
1
Wenn ich nur den Inhalt eines Ordners löschen möchte, aber keinen Ordner löschen möchte?
Kiquenet
3
@ beppe9000: Ich glaube ja. In den letzten Skripten verwende ich Remove-Item -Recurse -Force $dirund es funktioniert.
Michael Freidgeim
Ok, aber ich habe gerade gelesen, dass das Problem immer noch hier in der erweiterten Windows 10- Get-Help Remove-ItemDokumentation liegt, die nach dem Update-HelpAusführen erhalten wurde ...
beppe9000
2
Get-ChildItem sollte auch das Argument -Force haben, damit es auch versteckte Dateien / Ordner zurückgibt.
Vlad Iliescu
@MichaelFreidgeim - Ich habe dies verwendet und es hat zeitweise Fehler verringert, aber sie treten immer noch gelegentlich auf. Wenn Remove-Item -recurse für das Verzeichnis der obersten Ebene problematisch ist, können Sie erklären, warum es nicht ähnlich problematisch wäre, wenn es mit der Workaround-Zeile weitergeleitet wird? Get-ChildItem -recurse gibt die Kinder nicht in einer Bottom-up-Reihenfolge zurück. Bestellt Remove-Item seine Pipeline-Eingabe?
aggieNick02
42

Das hat bei mir funktioniert:

Remove-Item $folderPath -Force  -Recurse -ErrorAction SilentlyContinue

Daher wird der Ordner mit allen darin enthaltenen Dateien entfernt und es wird kein Fehler ausgegeben, wenn der Ordnerpfad nicht vorhanden ist.

necrifede
quelle
Dadurch wird der Ordner nicht gelöscht.
Variable
13

Update 2018

In der aktuellen Version von PowerShell (getestet mit v5.1 unter Windows 10 1809) kann die einfachere Unix-Syntax verwendet werden rm -R .\DirName, um das Verzeichnis .\DirNamemit allen darin enthaltenen Unterverzeichnissen und Dateien stillschweigend zu löschen . Tatsächlich funktionieren viele gängige Unix-Befehle in PowerShell genauso wie in einer Linux-Befehlszeile.

Divenex
quelle
Sie können auch verwenden rm -R .\DirName\*, um den Ordner zu bereinigen, ohne den Ordner selbst zu löschen
Jeff Chen
Keiner der Powershell-Befehle oder dieser funktioniert für mich auf einem 2016er Server-Core-Computer. Sie alle sagen: "Kann nicht entfernt werden, weil es nicht leer ist." Ich habe auch den Befehl rd in Windows ausprobiert. Ich kann den Ordner überall hin verschieben, kann ihn aber nicht löschen.
Helzgate
10

Um Inhalte ohne Ordner zu löschen, können Sie Folgendes verwenden:

Remove-Item "foldertodelete\*" -Force -Recurse
Dmitriy N. Laykom
quelle
6

rm -Force -Recurse -Confirm:$false $directory2Deletefunktionierte nicht in der PowerShell ISE , aber es funktionierte über die reguläre PowerShell CLI.

Ich hoffe das hilft. Es trieb mich zu Bannanas.

Flightdeck73
quelle
Danke, das gilt auch für mich! Schließlich wurde dieser Ordner beim Aufrufen von PowerShell CLIund nicht beim Entwickeln in gelöscht PowerShell ISE.
Bruno Bieri
3

Kurz gesagt, wir können rm -r -fo {folderName}den Ordner rekursiv entfernen (alle darin enthaltenen Dateien und Ordner entfernen) und erzwingen

Salman
quelle
2

Unten finden Sie eine kopierbare Implementierung der Antwort von Michael Freidgeim

function Delete-FolderAndContents {
    # http://stackoverflow.com/a/9012108

    param(
        [Parameter(Mandatory=$true, Position=1)] [string] $folder_path
    )

    process {
        $child_items = ([array] (Get-ChildItem -Path $folder_path -Recurse -Force))
        if ($child_items) {
            $null = $child_items | Remove-Item -Force -Recurse
        }
        $null = Remove-Item $folder_path -Force
    }
}
user2426679
quelle
1

Da sich mein Verzeichnis in C: \ users befand, musste ich meine Powershell als Administrator ausführen.

del ./[your Folder name] -Force -Recurse

Dieser Befehl hat bei mir funktioniert.

Omkar Agrawal
quelle
2
Nur als Randnotiz: delist ein Alias ​​für Remove-Item.
Michael Kargl
0
$LogPath = "E:\" # Your local of directories
$Folders = Get-Childitem $LogPath -dir -r | Where-Object {$_.name -like "*temp*"}
foreach ($Folder in $Folders) 
{
    $Item =  $Folder.FullName
    Write-Output $Item
    Remove-Item $Item -Force -Recurse
}
Anderson Braz
quelle
Im obigen Skript drucke ich den vollständigen Namen des Ordners und entferne ihn. \ o /
Anderson Braz
0

Wenn Sie Ihren Ordner als Objekt haben, nehmen wir an, Sie haben ihn mit demselben Befehl im selben Skript erstellt:

$folder = New-Item -ItemType Directory -Force -Path "c:\tmp" -Name "myFolder"

Dann können Sie es einfach so im selben Skript entfernen

$folder.Delete($true)

$ true - Zustände zum rekursiven Entfernen

Dmitriy Reznikov
quelle
0
$LogPath = "E:\" # Your local of directories
$Folders = Get-Childitem $LogPath -dir -r | Where-Object {$_.name -like "*grav*"} # Your keyword name directories

foreach ($Folder in $Folders) 
{
    $Item =  $Folder.FullName
    Write-Output $Item
    Remove-Item $Item -Force -Recurse -ErrorAction SilentlyContinue
}
Anderson Braz
quelle
Im obigen Skript drucke ich den vollständigen Namen des Ordners und entferne ihn. Ein guter Job ...
Anderson Braz
1
Hallo Anderson, du solltest Antworten bearbeiten, wenn du nicht vorhast, zwei verschiedene Antworten hinzuzufügen. Vielleicht möchtest du eine davon löschen?
Bummi
0

Das hat bei mir funktioniert:

Remove-Item C:\folder_name -Force -Recurse
Variable
quelle