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.