Cara menghapus direktori dengan konten di PowerShell secara diam-diam

Jawaban:

340
Remove-Item -LiteralPath "foldertodelete" -Force -Recurse
Michael Price
sumber
16
Saya menemukan bahwa saya perlu menjalankan ini dua kali ketika dijalankan pada direktori yang berisi subdirektori. Pertama kali, akan ada banyak kesalahan "Direktori tidak kosong". Kedua kalinya, itu selesai tanpa kesalahan.
Kristopher Johnson
1
Jika saya ingin menghapus hanya isi folder tetapi tidak menghapus folder?
Kiquenet
2
@ Kiquenet- Ini berfungsi untuk saya, jika saya menambahkan garis miring pada path, jadi contoh ini menjadi Remove-Item. \ Foldertodelete * -Force -Recurse
Adrian Carr
3
Jika Anda ingin mengabaikan folder yang hilang, Anda dapat menambahkan -ErrorAction Ignore, meskipun itu juga akan menyembunyikan kesalahan lainnya.
Tor Klingberg
2
@Kiquenet Kemudian Anda dapat menggunakan wildcard untuk menghapus segala sesuatu dalam folder itu: Remove-Item './folder/*'. Jika Anda benar-benar ingin menghapus hanya file dari semua folder, Anda dapat mendaftar semua daun dan pipa ke cmdlet Hapus-ItemGet-ChildItem -Recurse -File | Remove-Item
Michael Kargl
62

Dari PowerShell remove force answer : help Remove-Item mengatakan:

Parameter Perulangan dalam cmdlet ini tidak berfungsi dengan baik

Perintah untuk menyelesaikannya adalah

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

Dan kemudian hapus folder itu sendiri

Remove-Item $Destination -Force 
Michael Freidgeim
sumber
1
Jika saya ingin menghapus hanya isi folder tetapi tidak menghapus folder?
Kiquenet
3
@ beppe9000: Saya percaya, ya. Dalam skrip baru-baru ini saya menggunakan Remove-Item -Recurse -Force $dirdan berfungsi.
Michael Freidgeim
Ok, tapi saya baru saja membaca bahwa masalahnya masih di sini pada windows 10 Get-Help Remove-Itemdokumentasi diperpanjang yang diperoleh setelah Update-Helpdijalankan ...
beppe9000
2
Get-ChildItem juga harus memiliki argumen -Force, sehingga ia juga mengembalikan file / folder tersembunyi.
Vlad Iliescu
@MichaelFreidgeim - Saya telah menggunakan ini dan itu telah mengurangi kegagalan intermiten, tetapi kadang-kadang masih terjadi. Jika Remove-Item -recurse bermasalah untuk direktori tingkat atas, dapatkah Anda menjelaskan mengapa itu tidak akan sama bermasalahnya ketika disalurkan ke dalam jalur penyelesaian? Get-ChildItem -recurse tidak mengembalikan anak-anak dalam urutan bottom-up. Apakah Remove-Item memesan input pipelined-nya?
aggieNick02
42

Ini bekerja untuk saya:

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

Dengan demikian folder dihapus dengan semua file di sana dan itu tidak menghasilkan kesalahan jika path folder tidak ada.

necrifede
sumber
Ini tidak menghapus folder.
variabel
13

Pembaruan 2018

Dalam versi PowerShell saat ini (diuji dengan v5.1 pada Windows 10 1809) orang dapat menggunakan sintaks Unix yang lebih sederhana rm -R .\DirNameuntuk secara diam-diam menghapus direktori .\DirNamedengan semua subdirektori dan file yang mungkin dikandungnya. Sebenarnya banyak perintah Unix yang umum bekerja dengan cara yang sama di PowerShell seperti pada baris perintah Linux.

divenex
sumber
Anda juga dapat menggunakan rm -R .\DirName\*untuk membersihkan folder tanpa menghapus folder itu sendiri
Jeff Chen
tidak ada perintah PowerShell atau yang ini bekerja untuk saya di komputer inti server 2016. Mereka semua berkata, `tidak bisa dihapus karena tidak kosong '. Saya juga mencoba perintah rd di windows. Saya dapat memindahkan folder ke mana saja, tidak bisa dihapus.
Helzgate
10

Untuk menghapus konten tanpa folder Anda dapat menggunakan yang berikut:

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

rm -Force -Recurse -Confirm:$false $directory2Deletetidak bekerja di ISE PowerShell , tetapi bekerja melalui PowerShell CLI biasa.

Saya harap ini membantu. Itu membuatku bannanas.

Flightdeck73
sumber
Terima kasih, hal yang sama berlaku untuk saya! Akhirnya folder ini dihapus saat menelepon dari PowerShell CLIdan tidak saat berkembang di PowerShell ISE.
Bruno Bieri
3

singkatnya, Kita dapat menggunakan rm -r -fo {folderName}untuk menghapus folder secara rekursif (menghapus semua file dan folder di dalamnya) dan memaksa

Salman
sumber
2

Di bawah ini adalah implementasi dari jawaban Michael Freidgeim yang dapat di-copy-paste

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
    }
}
pengguna2426679
sumber
1

Karena direktori saya berada di C: \ pengguna saya harus menjalankan PowerShell saya sebagai administrator,

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

perintah ini bekerja untuk saya.

Omkar Agrawal
sumber
2
Sama seperti catatan tambahan: deladalah alias untuk 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
sumber
Pada skrip di atas saya mencetak nama lengkap folder dan menghapusnya. \ o /
Anderson Braz
0

Jika Anda memiliki folder sebagai objek, katakanlah Anda membuatnya dalam skrip yang sama menggunakan perintah berikutnya:

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

Maka Anda bisa menghapusnya seperti ini di skrip yang sama

$folder.Delete($true)

$ true - menyatakan untuk penghapusan rekursif

Dmitriy Reznikov
sumber
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
sumber
Pada skrip di atas saya mencetak nama lengkap folder dan menghapusnya. Pekerjaan yang bagus ...
Anderson Braz
1
Halo Anderson, Anda harus mengedit jawaban jika Anda tidak berencana untuk menambahkan 2 jawaban berbeda, mungkin Anda ingin menghapus salah satunya?
bummi
0

Ini bekerja untuk saya:

Remove-Item C:\folder_name -Force -Recurse
variabel
sumber