Cara menghapus direktori dengan konten di PowerShell secara diam-diam


Jawaban:


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

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 

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.


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.


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

6

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

Saya harap ini membantu. Itu membuatku bannanas.


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


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

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.


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
}

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


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
}

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.