Komut satırını kullanarak Windows'ta bir klasörü tamamen silin


57

İçinde başka klasörler ve dosyalar içeren bir klasörü silmem gerekiyor. Denedim delve rmdirkomut verdim ama bazen bazı hata satırlarında başarısız oluyorlar:[PATH]: The directory isn't empty.

İyi bir alternatif var mı?


Uygun bayraklı rmdir'in bir dizin ağacındaki (ve / veya ağacın kendisindeki) her şeyi kaldırıp kaldırmamada tutarsızlık yaşadım ve elimdeki tek açıklama Harry Johnston'ın söylediği şeydi.
r_alex_hall 14:16

Yanıtlar:


15

Bu benim otomatik derleme komut dosyaları ile bana çok olur.

Sanırım sebebi o dizinde "share delete" yazan bir dosya açık olan bir uygulama olabilir. Diğer bir deyişle, uygulama dosyanın silinmesine izin verir (bu nedenle DeleteFile çağrısının başarısız olmadığını anlıyorum), ancak dosya yalnızca söz konusu uygulama işleci kapandıktan sonra kaybolacaktır.

Bu rmdirkomut, klasörü silmeye çalıştığında dosyanın hala orada olabileceği anlamına gelir , bu nedenle hata mesajı. Kısa bir süre sonra, söz konusu uygulama tutamağını kapatacak, dosya kaybolacak ve hangi dosyanın rmdironun hakkında konuştuğunu görmek için klasörü incelediğinizde boş kalacaktır.

En azından benim teorim.

Harry Johnston tarafından önerilen geçici çözüm iyi görünüyor. Sadece rmdirkomutların arasına bir duraklama eklerdim. Elbette, Windows kolayca komut dosyası "duraklat" komutuna sahip değildir (düzeltme: eski Windows sürümleri yoktur, daha yeni olan - yorumları görün). Ancak saniye ayrıntı düzeyi yeterli pingolduğunda duraklama oluşturmak için kullanabilirsiniz :

ping -n {desired_delay_in_seconds + 1} 127.0.0.1 >nul

Yani toplamda:

rd /s /q foo
:: retry once
if exist foo (
    :: clear errorlevel
    cmd /c
    :: pause
    ping -n 2 127.0.0.1 >nul
    :: retry
    rd /s /q foo
)
:: retry yet again
if exist foo (
    cmd /c
    ping -n 2 127.0.0.1 >nul
    rd /s /q foo
)
:: give up
if exist foo {panic}

Tecrübelerime göre, duraklama hiçbir zaman gerekli değildir, fakat YMMV. (Tabii ki oyunda gerçekten başka bir uygulama varsa, onu tanımlamak ve mümkünse çıkmasını beklemek için açıkça beklemek tercih edilir.)
Harry Johnston

Şey ... Yeniden deneme başına bir saniye gecikmeli bir 10x yeniden deneme döngüsü uyguladım. Şimdi çalışıyor Duraklamayı kaldırmaya çalışmayacağım, sadece tekrar başarısız olduğunu görmek için :-) Tabii ki bu gerekli olduğu anlamına gelmiyor. Sadece ekstra temkinli olmak.
Paul Groke

2
OT: Bu yüzden pencerelerden nefret ediyorum. Her şey çok zor. rm -rf /directory/tüm işletim sistemlerinde küresel olmalıdır.

2
Aslında bir "duraklama" komutu vardır; üç saniye duraklatmak için bunu kullanabilirsiniz:timeout /t 3
r_alex_hall

@ r_alex_hall Nitekim (ancak yerel olarak yalnızca Vista'dan itibaren, XP ve daha önceki pausekomutlara sahip değildir ).
misha256

57

Deneyin:

rmdir /S your_directory

veya:

rmdir /S /Q your_directory 

onay mesajlarını atlamak için


1
Bu seçenekleri çoktan denedim ama yazdım delve rmdirhiçbir şey sormadım, sadece açıklamadaki gibi bazı satırlar gönderdiler.
Francesco Zanini,

2
rmdir /sSilmek mümkün olan her şeyi siler. Bir program tarafından kilitlenmiş dosyalara, salt okunur dosyalara veya silmek için yönetici erişimine ihtiyacınız olan dosyalara sahip olabilirsiniz. Sizin için tüm bu durumlarla ilgilenecek tek bir emir yoktur
nvuono

Hala hata mesajları alıyorsanız, PowerShell'i deneyin: cmdlet Remove-Item, rmdir'den biraz güçlü.
AndrewQ,

1
rmdir / S <directory> Dizin ve alt klasörleri ve dizinleri siliyor. Ayrıca emin misiniz. Windows 10'da. Teşekkürler
Jasmeet

1
@ r_alex_hall RMDIR / s gerçekten dizinlerdeki dosyaları siler. Ancak DEL / s sadece dosyaları silecek ve dizinleri tutacaktır, bu yüzden RMDIR daha iyi bir seçenektir
JCH2k

11

Salt okunur dosyalarınız olabilir, bunlardan kurtulmak için del / F seçeneğini kullanabilirsiniz.

     del /S /F your_directory
     rmdir your_directory

Ayrıca bazı gizli dosyalarınız olabilir ve onları silmek istediğinizden eminseniz, o zaman bunu kullanarak yapabilirsiniz.

     del /S /F /AH your_directory
     rmdir your_directory

Bu hala başarısız olursa, o zaman bazı dosyaları silme izniniz yoktur veya bazı dosyalar hala kullanımdadır.


Bu doğru cevap olmalı!
jdhao

4

Windows 7'de (ve belki de diğer sürümlerde) bazen bu belirtiye neden olan bir hata olduğuna inanıyorum; veya üçüncü taraf yazılımlarda bir hata olabilir. (Symantec Endpoint Protection, herhangi bir şansınız varsa kurmuş mu?)

Her neyse, oldukça sık rastladım. Çoğu durumda, sorun rd /s /qüst üste iki veya üç kez çalıştırılarak çözülebilir .

Bu bir toplu iş dosyasında ise, böyle bir şey yapabilirsiniz:

rd /s /q foo
if exist foo rd /s /q foo
if exist foo rd /s /q foo
if exist foo echo Help! & pause

Kabul. Rd / s foo komutunu kullanmak - / q sessiz seçeneği olmadan - sizin için tüm alt klasörleri siler, ancak komut istemine Y'yi yanıtlamanız gerekir, bu nedenle toplu iş dosyalarına katılmak gerekir. İdeal olandan daha az biliyorum.
Anthony,

3

Klasörü kaldırmak için deliçindeki dosyaları kullanın rmdir.

rmdirTüm dosyaları da kaldırmak için bu yöntemi kullanmak için , dizin adından önce/S düğmeyi kullanın ve silmenin istenmesini önleyin. Bunu yapmanın en iyi yoludur, çünkü herhangi bir dosyayı kaçırmazsınız. / Q anahtarını kullanırken dikkatli olun, çünkü sizi Sistem veya Gizli dosya özniteliklerine karşı uyarmaz/Q


2

Eğer kullanırsanız düğümü kullanabilirsiniz rimraf böyle bağımlılığı:

yükleme çalıştır: npm install rimraf -g

klasörü sil: rimraf SourceFolder

Bu hatayı alırken bana yardımcı oldu:

kaynak dosya adları, dosya sistemi tarafından desteklenenden daha büyük


0

Klasörün eski Windows sürümleri (DOS, Windows 95/98 / ME), ya da DELTREEeşdeğerdir . Kullandığım sadece iyi olsa toplu dosyalarında benim Windows 7 iş istasyonu üzerinde.RMRMDIRDELTREE

Deletes a directory and all the subdirectories and files in it.

To delete one or more files and directories:
DELTREE [/Y] [drive:]path [[drive:]path[...]]

  /Y              Suppresses prompting to confirm you want to delete
                  the subdirectory.
  [drive:]path    Specifies the name of the directory you want to delete.

Note: Use DELTREE cautiously. Every file and subdirectory within the
specified directory will be deleted.

0

Sanırım bu şekilde kullanabilirsiniz:

msg*your file is going to delete 
pause
del/s /q "C:\Users\Rd\Desktop\New folder (2)\" 
rmdir /s /q "C:\Users\Rd\Desktop\New folder (2)\"
mkdir "C:\Users\Rd\Desktop\New folder (2)"

1
SU'ya Hoşgeldiniz! Neden düşürdüm? 1) Zayıf biçimlendirme 2) Birkaç yıl önce yayınlanmış olanla aynı temel çözümü sunar (yeni bir tane göndermeden önce her zaman yayınlanan çözümleri okuyun!) 3) Soruya uygun hale getirilmedi istenmedi).
zagrimsan
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.