Dizin ağaçlarını Windows 7'deki toplu iş dosyasıyla nasıl silerim?


36

Belirli bir klasörün tüm içeriğini Windows 7'de toplu iş dosyasıyla silmek istiyorum. Benim sorunum, 'del' veya 'silmek' sadece klasörleri değil dosyaları siler ve 'rmdir' veya 'rd' her zaman belirtilen klasörü içeriğiyle birlikte siler, ancak yalnızca klasörü silmek yerine içeriği silmek istiyorum . rmdir /S /Q "C:\Share\*"Bana bir sözdizimi hatası veren ' ' komutunu denedim .

Bunu yapmanın doğru yolu nedir?

Windows 7 Professional 64-bit üzerinde çalışıyorum ve yönetici izinlerim var.

Yanıtlar:


36

Toplu iş dosyanızın iki komutu çalıştırması gerekir; biri dosyaları siler, sonra da alt dizinleri siler. Kaldırmak istediğiniz dizininC:\Share\

Toplu iş dosyası şöyle görünmelidir:

del /s /f /q c:\share\*.*
for /f %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

del /s /f /q Onay istemeden herhangi bir dosyayı silmek için dizin ağacını tekrar tekrar arayacaktır (sadece dosyaları okuyabilir).

İkinci satır (şimdi boş olması gereken) tüm alt dizinler arasında dolaşır ve bunları kaldırır.

Klasörün tamamını silmek ve yeniden oluşturmak (bu izinler nedeniyle yapmak istemediğinizi sanmıyorum?) Kısaca, klasörü temizlemenin en kolay yolu bu olmalıdır.


Burada "/ f %% f" -> "için / f% f" için biraz düzeltme yaparsam daha iyi çalışır :) Çok teşekkür ederim.
Michael K

6
delgerekli değil. rd/s/qhem dosyaları hem de alt klasörleri siler.
Grawity

1
@grawity, delkök klasördeki herhangi bir dosya için esas olarak oradadır, yineleme anahtarını kaldırabilir.
Windows

5
@MichaelK, %% f toplu iş dosyalarında,% f doğrudan komut satırına tek bir komut geldiğinde kullanım içindir.
Windows

1
Alt dizin adlarından herhangi biri boşluk içeriyorsa, bunları doğru şekilde işlemek için "delims =" ekleyebilirsiniz (for / f "delims =" %% f in ...): Bkz. Stackoverflow.com/q/5553040/64918
goldPseudo

27
rmdir /s/q C:\Share

"Sözdizimi hatası" alırsınız rmdir, çünkü joker karakterleri değil, yalnızca tam adları kabul eder. (İçinde cmd.exe, joker genişlemesi bireysel programlara bırakılır; bunların tümü değildir.)

İle başlayan çok sayıda dizin varsa Share..., bir fordöngü kullanın .

for /d %f in (C:\Share*) do rmdir /s/q "%f"

3
Paylaşım klasörünü silmek istemiyorum.
Michael K


2

Ne dersin ?

rmdir /S /Q "target"
mkdir "target

EDIT: Tabii ki bu çözüm sadece anlık bir klasörün yokluğuna tahammül edebiliyorsanız uygulanabilir.


Bu, orijinal klasörü siler.
Michael K,

@MichaelK Görevim geçici bir klasör eksikliğine tahammül edemedi, bu yüzden bu çözümü kullandım. for /fBenimkine benzer davalardan daha basit ve okunabilir olduğunu düşündüm . Sadece paylaşmak istedim
Vasilly.Prokopyev

2
for /f "delims=" %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

Bu, alt dizinler boşluk içeren başka dizinler içeriyorsa çalışmaz.

Bu işi yapmak için, son dizgiyi alıntılamalıyım, bunun gibi.

/ f "delims =" için %% f ('dir / ad / bc: \ share \') içinde rd / s / q yapın "c: \ share \ %% f"

Görünüşe göre bu, komutun yalnızca dizenin kendisi yerine alıntı yapılan dizgede çalışmasına neden olur.


0

Bunu, tüm alt klasörlerin silinmesi gereken klasörde deneyebilirim, ancak kök (ve kökündeki dosyalar) olduğu gibi bırakıldı: / /%% v in (*) rd / s / q% v

for / D dizinleri eşleştirir ve rd / s / q her seferinde bir siler


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.