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


Odpowiedzi:


340
Remove-Item -LiteralPath "foldertodelete" -Force -Recurse

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 

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.


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.


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


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.


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


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
    }
}

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.


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
}

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


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
}

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.