Biri hariç tüm dosyaları silmek için MS-DOS komutu


25

Biri dışındaki tüm dosyaları silmeme izin veren bir MS-DOS komutu var mı?

Bir örnek olarak aşağıdaki dosyaları düşünün:

a.001  
a.002  
a.003  
a.exe  
a.c  

Dışındaki tüm dosyaları silmek için bir komut var mı a.c?

Yanıtlar:


36

Bunu başarmak için forve ifkomutlarını kullanabilirsiniz:

for %i in (*) do if not "%~i" == a.c del "%~i"

Bu, geçerli dizine gider ve her dosya adını ac ile karşılaştırır. Eşleşmezse, dosya silinir.


+1 bunu basit bir silme için kullanmayı asla düşünmezdi ... Burada çok sayıda iyi cevap var!
William Hilsum

4
@Wil, fordüzenli kullanmaya başladığınızda , bunun için her tür çılgın senaryo ile karşılaşırsınız. :)
Kevin

4
@Mike, "% i içindeki (A: \ Some \ Path \ *) için% ~ nxi == ac del% i" yapmıyorsanız, bu klasördeki dosyaları almak için yolun bittiğini unutmayın. ve karşılaştırmanın% ~ nxi'ye karşı olduğunu, yolu olmayan bir isim olduğunu. Bu gibi döngüler için tahrip edici olması için, "for ... do if ... del% i" komutunu çalıştırmadan önce hangi dosyaların etkileneceğini görmek için "for ... i echo% i" yapmak iyi bir fikirdir.
Kevin

1
Daha iyi kullanımdel "%i"
Mugen

1
Büyük / IFküçük harfe duyarsız olması için ifadeye ihtiyacınız varsa , değiştirin IF /I.
Perşembe

16

Dosyayı yalnızca her şeyi silmeden önce okunacak şekilde ayarlayabilirsiniz.

attrib +r a.c
del *.*
attrib -r a.c

10

Hayır yok. Bir dizin hazırlar, önemli dosyayı kopyalar, silerim . ve dosyayı geri taşıyın. Sonra geçici dosyayı silin.

mkdir temp
move a.c temp
erase *.*
move temp\* .
rmdir temp

1
+1 ham ve teknik olarak @Feht hırsızı bunu yapmanın daha iyi bir yolunu söylüyor (orada ayrıca +1 de verdi), ancak hız için bu benim yapacağım yol.
William Hilsum

3
FOR %f IN (*.*) DO IF NOT [%f]==[a.c] DEL /Q %f

1
[] ne yararı var?
barlop

1
@ barlop: %fdosya adında boşluklar olabilir.
paradroid

@ Paradroid hayır eğer [4 r] == [4 r] eko eşit ben de bazıları tarafından yapılan benzer görmedim eğer bunun için yardımcı olmaz. yerine []. Neden olduğunu tahmin edebilirim ama bunu yapan birinden duymayı tercih ederim.
barlop

@ barlop: Orada ne yazdığınız hakkında hiçbir fikrim yok, ancak köşeli parantezler tıpkı alıntı işaretleri gibi çalışır.
paradroid

@ paradroid C: \> [4 r] == [4 r] echo abc <ENTER> sonucu verirse "r] == [4 şu anda beklenmiyordu." Oysa C: \> "4 r" == "4 r" echo abc ise abc sonucunu verir. Öyleyse, herhangi bir şekilde alıntı işaretleri gibi çalışacaklarını düşündüren nedir? C: \> bile [ab] == [ab] echo abc <- çalışmıyorsa aynı hatayı veriyor. b] == [a şu anda beklenmiyordu. Peki, tırnak işaretleri gibi çalıştıklarını düşündüren nedir?
barlop

1
FOR /F "tokens=1-4" %%a in ('dir /a:-d /b /s %app_path%^|find /v "%file%"') DO Del /q %%a %%b %%c %%d

Ne işe yaradığı açıklandıysa, bunun muhtemelen yardımcı olacağını düşünüyorum. İstediğim şey olan klasör ağacının tamamını geçiyor gibi görünüyor. %app_path%ve %file%travers edilecek ağacın kökü ve silmekten kaçınmak için kullanılan dosya. Nedir ^ve neden dosya başına dört belirteç Delkomutuna geçiyoruz ?
LarsH

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.