Bir klasördeki ve alt klasörlerinden tüm dosyaları silin


52

Tüm dosyaları bir klasör yapısından kaldırmak istiyorum, bu yüzden boş bir klasör yapısına kaldı.

Bu, toplu iş veya VBScript komut dosyasında gerçekleştirilebilir mi?

Çok temel bir toplu komut çalıştırmayı denedim, ancak bu kullanıcının her dosyanın silinmesine izin vermesini gerektiriyordu. Bu, yüzlerce dosya olduğundan ve zamanla büyük ölçüde artacağı için uygun bir çözüm değildi.

Ne önerebilirsin?


Özyinelemeli silme mi demek istiyorsun? Bu gerçekten yapılabilir. Gibi rd /s /q "c:\folder abir şey içindeki tüm dosya ve klasörlerde özyinelemeli bir silme gerçekleştirecekFolder A
Ramhound

Yapabilirim, powershell'de komut dosyası yazmayı bilmiyorum ama önceki çalıştırma powershell komut dosyalarını kullandım.
BobJim

2
Şimdi öğrenmek için mükemmel bir zaman, toplu amaçlar ve vbs sözdizimini eski amaçlar için araştırıyordum, ancak PS öğrenmeye daha fazla zaman harcıyorum.
MDMoore313

İşe yarayacağından emin olduğum halde kodu kontrol etme şansım olmadı. Geri döneceğim ve ilk sorguma en uygun cevabı seçeceğim.
BobJim

@ BigHomie'nin tavsiyesini ikinci olarak söyleyeceğim - biraz PowerShell öğrendim ve çok temiz olduğunu söylemek zorundayım - çok zor değil, herhangi bir kodlayıcının cephaneliğinde iyi bir silah. Şimdi oldukça sık kullanıyorum.
Ben

Yanıtlar:


75

Bu PowerShell kullanılarak gerçekleştirilebilir :

Get-ChildItem -Path C:\Temp -Include *.* -File -Recurse | foreach { $_.Delete()}

Bu komut her bir alt öğeyi $pathiçeri alır , her biri için silme yöntemini çalıştırır ve oldukça hızlıdır. Klasör yapısı bozulmadan kalır.

Bir uzantısı olmayan dosyalarınız varsa,

Get-ChildItem -Path C:\Temp -Include * -File -Recurse | foreach { $_.Delete()}

yerine.

Görünüşe göre -Fileparametre PowerShell v2'den sonra eklenmiş olabilir. Eğer öyleyse, o zaman

Get-ChildItem -Path C:\Temp -Include *.* -Recurse | foreach { $_.Delete()}

Bir uzantısı olan dosyalar için hile yapmalı.

Öyle değil işi yaparsa çek sen PowerShell bir yukarı güncel sürümü varsa


1
O var -Include *.*değil -Include ., büyük fark! :-)
MDMoore313

Get-ChildItem -Yol D: \ EmptyThisFolder -Bildir . -Dosya -Tekrar | foreach {$ _. Delete ()}
BobJim

Neden Kullandığınız -Include .?? Sorun bu.
MDMoore313

2
Uygulayamıyorlar powershell --versionmı? Olumlu rakamlarla bir sürüm numarası kullanamazlar mı? Bu sadece delilik. Bir programın sürüm numarasını nasıl bulacağınızla ilgili bir soru için 1300'den fazla indirim mi?
Thomas Weller

1
@demonicdaron olması gerekiyordu; OP'nin sorumluluğu klasör yapısını korumaktı .
MDMoore313

23

Kısa ve süit PowerShell. PS'nin en düşük sürümüyle çalışacağından emin değil.

Remove-Item c:\Tmp\* -Recurse -Force

2
Güzel ve kolay. Bu hile yaptı, kabul edilen cevap ise vermedi!
demonicdaron

Bu kabul edilen cevap olmalıdır, rm *zorlamanız gerçekten tavsiye edilmediği için bile yazabilirsiniz (onaylama diyaloğunda "Herkese Evet" seçeneği vardır).
J Garcia,

22

Bunu delkomut ile yapabilirsiniz :

dir C:\folder
del /S *

/SAnahtar yinelemeli dosyaları silmektir.


2
Bu sadece dosyaları silecek, ancak klasörleri bırakacak mı?
BobJim

5
Evet. /PSeçenek ekleyebilirsiniz, böylece bunu kontrol etmek için her silmeyi onaylamanızı ister.
14'te

teşekkürler hasta bir şans ver! umarım çok zaman kazandıracak!
BobJim

3
Evet. Gizli ve sistem dosyalarını silmek için silmeden attrib -s -r -h Folder\*.* /s /dönce yapın. Ve izinler için takeownkomutu kullanın.
Jet

2
Ve sen / Q kullanabilirsiniz DEĞİL joker kullanırken onay ister.
Aylatan

4

Orijinal sorunuzdaki satırlar arasında okuma yaparak kullanabileceğiniz alternatif bir BATCH kod satırı sunabilirim. Koştuğunda bunun ne yapacağını sadece 60 günden eski dosyaları silmektir. Bu şekilde bunu zamanlanmış bir göreve koyabilirsiniz ve çalıştırıldığında, tüm dizini boşaltmak yerine ihtiyacınız olmayan fazla dosyaları siler. İsterseniz 60 ila 5 gün, hatta 1 günü değiştirebilirsiniz. Bu, klasörleri silmez.

forfiles -p "c:\path\to\files" -d -60 -c "cmd /c del /f /q @path"

Fikir için teşekkürler ama şu anda "boşaltma" işleminin çok programlanmamış geçici bir zaman diliminde tamamlanacağını düşünüyorum. Yine de bu kodu gelecek için saklayacağım! Şerefe
BobJim

Başlığı "Tüm dosyaları bir klasörden ve alt klasörlerinden sil" yazıyor, bu yüzden bu bir çözüm değil.
Anders Lindén,


3

Tek Bir Dosya veya Klasörü Silmek için PowerShell'i kullanın. Powershell'de Sil komutunu çalıştırmadan önce, silmek istediğiniz nesnelere tam erişimi olan bir hesapla sunucuya veya PC'ye giriş yaptığınızdan emin olmamız gerekir.

Örnek: http://dotnet-helpers.com/powershell-demo/how-to-delete-a-folder-or-file-using-powershell/

Bir dosyayı silmek için PowerShell komutlarını kullanma

Kaldırma Öğesi -Path "C: \ dotnet-helpers \ DummyfiletoDelete.txt"

Yukarıdaki komut “C: \ dotnet-helpers” konumunda bulunan “DummyfiletoDelete.txt” dosyasını çalıştıracak ve silecektir.

Tüm dosyaları silmek için PowerShell komutlarını kullanma

Kaldırma Öğesi -Path "C: \ dotnet-helpers *. *"

Tüm dosya ve klasörleri silmek için PowerShell komutlarını kullanma

Kaldırma Öğesi -Path "C: \ dotnet-helpers *. *" -Recurse

-recurseaşağı matkap ve çok daha fazla dosya bulur. –recurseParametre PowerShell izin istemeden tüm alt öğeleri kaldırmak için izin verecektir. Ayrıca, gizli veya salt okunur dosyaları silmek için –force parametresi eklenebilir.

Dosyaları zorla silmek için -Force komutunu kullanma

Tüm dosyaları zorla silmek için PowerShell komutunu kullanma

Kaldırma Öğesi -Path "C: \ dotnet-helpers *. *" -Force


1

PowerShell kullanarak bunu deneyin. Bu örnekte, tüm .class dosyalarını silmek istiyorum:

Get-ChildItem '.\FOLDERNAME' -include *.class -recurse | foreach ($_) {remove-item $_.FullName}

1
  1. Windows Gezgini'nde tüm dosya ve klasörleri içeren kök dizini seçin.

  2. Aramak *

  3. Türe göre sırala (Tüm klasörler en üstte ve altta listelenen tüm dosyalar olacaktır)

  4. Tüm dosyaları seçin ve Sil düğmesine basın.

Bu, tüm dosyaları silecek ve dizin yapısını koruyacaktır.


1

Geçerli dizindeki ve alt dizinlerdeki tüm dosyaları silin ancak klasörler yapısını terk edin.

( /Q) anahtarı, kullanıcıya silmek için uygun olup olmadığını sormak içindir.

Dikkat : /Qdeğerli bir şeyi silmemediğinizden emin olmak için yapmadan deneyin .

del /S * /Q 

1

IMO'nun en kolay yolu bu

PowerShell'i açın, dizine gidin ( cd), THEN

ls -Recurse * | rm

(Poof) her şey gitti ...

Belirli bir uzantıya dayalı silmek istiyorsanız

ls -Recurse *.docx | rm

ls dizini listeliyor

-Recurse Powershell'e alt dizinlere girmesini söyleyen bir bayraktır.

* her şeyi söylüyor

*.doc .doc uzantılı her şey

| çıktıyı soldan sağa doğru besleyin

rm silmek

Diğer tüm cevaplar bunu gereğinden fazla kafa karıştırıcı kılıyor.


0
dir C:\testx\ -Recurse -File | rd -WhatIf
What if: Performing the operation "Remove File" on target "C:\testx\x.txt".
What if: Performing the operation "Remove File" on target "C:\testx\bla\x.txt".

-1

Yukarıdaki cevapların bir tamamlayıcısı olarak, aslında Get-Childitem'i kullanmaya ve sonucu yukarıdaki cevaplarda boru hattına aktarmaya gerek yoktur, çünkü -Include anahtar sözcüğü Kaldır Öğesi komutuna dahil edilmiştir.

Bir basitçe:

Kaldırma Öğesi -Başlat " . " "C: \ Temp" -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.