PowerShell'de içeriğe sahip bir dizin sessizce nasıl kaldırılır


Yanıtlar:


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

16
Ben alt dizinleri içeren bir dizinde çalıştırırken bu iki kez çalıştırmak gerektiğini buldum. İlk seferinde birçok "dizin boş değil" hatası olacaktır. İkinci kez, hatasız tamamlanır.
Kristopher Johnson

1
Sadece klasör içeriğini silmek istiyorsam klasörü silmek istemiyorsam?
Kiquenet

2
@ Kiquenet- Bu benim için işe yarar, eğer yola bir eğik çizgi eklersem, bu örnek Kaldır-Öğe olur. \ Foldertodelete * -Force -Recurse
Adrian Carr

3
Kayıp bir klasörü yoksaymasını isterseniz, -ErrorAction Ignorediğer hataları da gizleyecektir.
Tor Klingberg

2
@Kiquenet Sonra bu klasör içindeki her şeyi kaldırmak için joker karakterler kullanabilirsiniz: Remove-Item './folder/*'. Gerçekten tüm klasörlerin dosyalarını temizlemek istiyorsanız, tüm yaprakları listeleyebilir ve Remove-Item cmdlet'ine Get-ChildItem -Recurse -File | Remove-Item
bağlayabilirsiniz

62

Gönderen PowerShell kaldır kuvvet cevap : Yardım Kaldır-Madde diyor ki:

Bu cmdlet'deki Recurse parametresi düzgün çalışmıyor

Geçici çözüm komutu

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

Ve sonra klasörün kendisini silin

Remove-Item $Destination -Force 

1
Sadece klasör içeriğini silmek istiyorsam klasörü silmek istemiyorsam?
Kiquenet

3
@ beppe9000: İnanıyorum, evet. Son komut dosyalarında kullanıyorum Remove-Item -Recurse -Force $dirve işe yarıyor.
Michael Freidgeim

Tamam, ama ben sadece sorun hala burada Get-Help Remove-Itemsonra elde Windows 10 genişletilmiş belgeleri üzerinde olduğunu okuyun Update-Help...
beppe9000

2
Get-ChildItem ayrıca -Force bağımsız değişkenine sahip olmalıdır, böylece gizli dosyaları / klasörleri de döndürür.
Vlad Iliescu

@MichaelFreidgeim - Bunu kullandım ve aralıklı başarısızlıkları azalttı, ancak yine de bazen oluyor. Remove-Item -recurse üst düzey dizin için sorunlu ise, geçici çözüm satırına dahil edildiğinde neden benzer şekilde sorunlu olmayacağını açıklayabilir misiniz? Get-ChildItem -recurse, çocukları aşağıdan yukarıya doğru döndürmez. Remove-Item boru hattı girdisini sipariş ediyor mu?
aggieNick02

42

Bu benim için çalıştı:

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

Böylece klasör içindeki tüm dosyalarla kaldırılır ve klasör yolu yoksa hata üretmez.


Bu klasörü silmez.
değişkeni

13

2018 Güncellemesi

PowerShell'in geçerli sürümünde (Windows 10 1809'da v5.1 ile test edilmiştir) rm -R .\DirName, dizini .\DirNameiçerebileceği tüm alt dizinler ve dosyalarla sessiz bir şekilde silmek için daha basit Unix sözdizimi kullanılabilir . Aslında birçok yaygın Unix komutu PowerShell'de bir Linux komut satırında olduğu gibi çalışır.


rm -R .\DirName\*Klasörü, klasörü silmeden temizlemek için de kullanabilirsiniz
Jeff Chen

powershell komutlarının hiçbiri ya da bu bir 2016 sunucu çekirdeği bilgisayarında benim için çalışmıyor. Hepsi diyor ki, `` boş olmadığı için çıkarılamaz ''. Ayrıca Windows'ta rd komutunu denedim. Klasörü herhangi bir yere taşıyabilirim, silemezsiniz.
Mart'ta Helzgate

10

Klasörsüz içeriği silmek için aşağıdakileri kullanabilirsiniz:

Remove-Item "foldertodelete\*" -Force -Recurse

6

rm -Force -Recurse -Confirm:$false $directory2DeletePowerShell ISE'de çalışmadı , ancak normal PowerShell CLI aracılığıyla çalıştı.

Umarım bu yardımcı olur. Bana bannanı sürüyordu.


Teşekkürler, benim için de geçerli! Nihayetinde bu klasör, çağrılırken PowerShell CLIdeğil , çağrılırken silinmiştir PowerShell ISE.
Bruno Bieri

3

Kısacası, rm -r -fo {folderName}klasörü tekrar tekrar kaldırmak (içindeki tüm dosya ve klasörleri kaldırmak) ve zorlamak için kullanabiliriz


2

Aşağıda Michael Freidgeim'in cevabının kopyalanabilir bir uygulaması yer almaktadır

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

Dizinin C: \ kullanıcıları olduğu için güç kabuğumu yönetici olarak çalıştırmak zorunda kaldım,

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

bu komut benim için çalıştı.


2
Tıpkı bir yan not gibi: deliçin bir takma addı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
}

Yukarıdaki komut dosyasında klasörün tam adını yazdırıyorum ve kaldırıyorum. \ o /
Anderson Braz

0

Klasörünüzü nesne olarak varsa, bir sonraki komutu kullanarak aynı komut dosyasında oluşturduğunuzu varsayalım:

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

Sonra aynı komut dosyasında bu şekilde kaldırabilirsiniz

$folder.Delete($true)

$ true - özyinelemeli kaldırma durumları


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
}

Yukarıdaki komut dosyasında klasörün tam adını yazdırıyorum ve kaldırıyorum. İyi bir iş ...
Anderson Braz

1
Merhaba Anderson, 2 farklı cevap eklemeyi düşünmüyorsanız yanıtları düzenlemeniz gerekir, belki bunlardan birini silmek istersiniz?
bummi

0

Bu benim için çalıştı:

Remove-Item C:\folder_name -Force -Recurse
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.