Jak po cichu usunąć katalog z zawartością w PowerShell

Odpowiedzi:

340
Remove-Item -LiteralPath "foldertodelete" -Force -Recurse
Michael Price
źródło
16
Przekonałem się, że muszę to uruchomić dwa razy, gdy uruchamiam katalog zawierający podkatalogi. Za pierwszym razem pojawi się wiele błędów „Katalog nie jest pusty”. Za drugim razem kończy się bez błędów.
Kristopher Johnson,
1
Jeśli chcę usunąć tylko zawartość folderu, ale nie usuwać folderu?
Kiquenet,
2
@ Kiquenet- Działa to dla mnie, jeśli dodam ukośnik końcowy do ścieżki, więc ten przykład staje się Remove-Item. \ Foldertodelete * -Force -Recurse
Adrian Carr
3
Jeśli chcesz, aby zignorował brakujący folder, możesz go dodać -ErrorAction Ignore, chociaż spowoduje to również ukrywanie innych błędów.
Tor Klingberg
2
@Kiquenet Następnie można użyć symboli wieloznacznych, aby usunąć wszystko, co w tym folderze: Remove-Item './folder/*'. Jeśli naprawdę chcesz wyczyścić tylko pliki ze wszystkich folderów, możesz wyświetlić listę wszystkich liści i przesłać je do polecenia cmdlet Remove-ItemGet-ChildItem -Recurse -File | Remove-Item
Michael Kargl
62

Z PowerShell usuń siłę odpowiedzi : help Remove-Item mówi:

Parametr Recurse w tym poleceniu cmdlet nie działa poprawnie

Poleceniem obejścia jest

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

A następnie usuń sam folder

Remove-Item $Destination -Force 
Michael Freidgeim
źródło
1
Jeśli chcę usunąć tylko zawartość folderu, ale nie usuwać folderu?
Kiquenet,
3
@ beppe9000: Tak, wierzę. W najnowszych skryptach używam Remove-Item -Recurse -Force $diri to działa.
Michael Freidgeim
Ok, ale właśnie przeczytałem, że problem nadal występuje w rozszerzonej Get-Help Remove-Itemdokumentacji systemu Windows 10 uzyskanej po Update-Helpuruchomieniu ...
beppe9000,
2
Get-ChildItem powinien również mieć argument -Force, aby zwracał również ukryte pliki / foldery.
Vlad Iliescu,
@MichaelFreidgeim - Użyłem tego i zmniejszyło to sporadyczne awarie, ale wciąż się zdarzają. Jeśli polecenie Usuń-element-powtórzenie jest problematyczne dla katalogu najwyższego poziomu, czy możesz wyjaśnić, dlaczego nie byłoby podobnie problematyczne, gdy jest dołączone do wiersza obejścia? Get-ChildItem -recurse nie zwraca dzieci w kolejności od dołu do góry. Czy element Remove-Order zamawia dane wejściowe w potoku?
aggieNick02
42

To działało dla mnie:

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

W ten sposób folder jest usuwany ze wszystkimi plikami i nie powoduje błędu, jeśli ścieżka folderu nie istnieje.

nekroryzować
źródło
Nie powoduje to usunięcia folderu.
zmienna
13

Aktualizacja 2018

W bieżącej wersji programu PowerShell (przetestowanej w wersji 5.1 w systemie Windows 10 1809) można użyć prostszej składni Unix, rm -R .\DirNameaby dyskretnie usunąć katalog .\DirNameze wszystkimi podkatalogami i plikami, które może zawierać. W rzeczywistości wiele popularnych komend uniksowych działa w PowerShell w taki sam sposób, jak w linii poleceń Linuksa.

divenex
źródło
Możesz także użyć rm -R .\DirName\*do wyczyszczenia folderu bez usuwania samego folderu
Jeff Chen
żadne z poleceń PowerShell ani to nie działa dla mnie na podstawowym serwerze z 2016 roku. Wszyscy mówią: „nie można go usunąć, ponieważ nie jest pusty”. Próbowałem także polecenia rd w systemie Windows. Mogę przenieść folder w dowolne miejsce, po prostu nie mogę go usunąć.
Helzgate
10

Aby usunąć zawartość bez folderu, możesz użyć:

Remove-Item "foldertodelete\*" -Force -Recurse
Dmitriy N. Laykom
źródło
6

rm -Force -Recurse -Confirm:$false $directory2Deletenie działało w programie PowerShell ISE , ale działało przez zwykły interfejs CLI programu PowerShell.

Mam nadzieję, że to pomoże. Prowadził mnie bannany.

Flightdeck73
źródło
Dziękuję, to samo dotyczy mnie! FInalnie ten folder został usunięty podczas dzwonienia zi PowerShell CLIpodczas programowania PowerShell ISE.
Bruno Bieri,
3

w skrócie, możemy użyć rm -r -fo {folderName}do rekurencyjnego usunięcia folderu (usunięcie wszystkich plików i folderów w środku) i wymuszenia

Salman
źródło
2

Poniżej znajduje się implementacja odpowiedzi Michaela Freidgeima, którą można skopiować i wkleić

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
    }
}
użytkownik2426679
źródło
1

Ponieważ mój katalog znajdował się w C: \ users, musiałem uruchomić PowerShell jako administrator,

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

to polecenie działało dla mnie.

Omkar Agrawal
źródło
2
Na marginesie: deljest pseudonimem dla 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
źródło
Na powyższym skrypcie wypisuję pełną nazwę folderu i usuwam go. \ o /
Anderson Braz
0

Jeśli masz folder jako obiekt, powiedzmy, że utworzyłeś go w tym samym skrypcie, używając następnego polecenia:

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

Następnie możesz po prostu usunąć go w ten sam sposób

$folder.Delete($true)

$ true - stany usuwania rekurencyjnego

Dmitriy Reznikov
źródło
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
źródło
Na powyższym skrypcie wypisuję pełną nazwę folderu i usuwam go. Dobra robota ...
Anderson Braz,
1
Cześć Anderson, powinieneś edytować odpowiedzi, jeśli nie planujesz dodać 2 różnych odpowiedzi, może chcesz usunąć jedną z nich?
bummi
0

To działało dla mnie:

Remove-Item C:\folder_name -Force -Recurse
zmienna
źródło