Perintah MS-DOS untuk menghapus semua file kecuali satu

25

Apakah ada perintah MS-DOS yang memungkinkan saya untuk menghapus semua file kecuali satu?

Pertimbangkan sebagai contoh file-file berikut:

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

Apakah ada perintah untuk menghapus semua file kecuali a.c?

nunos
sumber

Jawaban:

36

Anda dapat menggunakan fordan ifmemerintahkan untuk melakukan ini:

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

Ini melewati direktori saat ini, dan membandingkan setiap nama file dengan ac. Jika tidak cocok, file dihapus.

Kevin
sumber
+1 tidak akan pernah berpikir untuk menggunakan ini untuk penghapusan sederhana ... Banyak jawaban bagus di sini!
William Hilsum
4
@Apakah, ketika Anda mulai menggunakan forsecara teratur, Anda membuat semua jenis skenario gila untuk itu. :)
Kevin
4
@ Mike, Anda menginginkan sesuatu seperti "untuk% i di (A: \ Some \ Path \ *) lakukan jika tidak% ~ nxi == ac del% i" Perhatikan bahwa path berakhir pada *, untuk mendapatkan file di folder itu , dan perbandingannya dengan% ~ nxi, nama tanpa jalur. Untuk destruktif untuk loop seperti ini, adalah ide yang baik untuk melakukan "for ... do echo% i" untuk melihat file apa yang akan terpengaruh sebelum menjalankan perintah "for ... do if ... del% i".
Kevin
1
Penggunaan yang lebih baikdel "%i"
Mugen
1
Jika Anda ingin IFpernyataan tidak peka huruf besar-kecil, ubah ke IF /I.
jep
16

Anda dapat mengatur file untuk dibaca hanya sebelum menghapus semuanya

attrib +r a.c
del *.*
attrib -r a.c
pencuri feiht
sumber
10

Tidak, tidak ada. Saya akan membuat direktori, menyalin file penting ke dalamnya, hapus . , dan pindahkan file kembali. Kemudian hapus file temp.

mkdir temp
move a.c temp
erase *.*
move temp\* .
rmdir temp
David Pfeffer
sumber
1
+1 kasar dan secara teknis pencuri @Feiht mengatakan cara yang lebih baik untuk melakukannya (jadi beri +1 juga di sana), tetapi untuk kecepatan, ini adalah cara yang akan saya lakukan.
William Hilsum
3
FOR %f IN (*.*) DO IF NOT [%f]==[a.c] DEL /Q %f
Carlos Gutiérrez
sumber
1
apa manfaatnya []?
barlop
1
@barlop: %fbisa ada spasi di nama file.
paradroid
@paradroid tidak ada yang tidak akan membantu untuk itu jika [4 r] == [4 r] sama dengan yang pernah saya lihat serupa dilakukan oleh beberapa orang, seperti dengan. dari pada []. Saya bisa menebak mengapa, tetapi saya lebih suka mendengarnya dari seseorang yang melakukannya.
barlop
@barlop: Saya tidak tahu apa yang baru saja Anda ketik di sana, tetapi tanda kurung berfungsi seperti tanda kutip.
paradroid
@paradroid C: \> jika [4 r] == [4 r] echo abc <ENTER> memberikan hasil "r] == [4 tidak terduga saat ini." Sedangkan C: \> jika "4 r" == "4 r" echo abc memberikan hasil abc. Jadi apa yang membuat Anda berpikir bahwa cara mereka bekerja seperti tanda kutip? Bahkan C: \> jika [ab] == [ab] echo abc <- tidak berfungsi memberikan kesalahan serupa. b] == [a tidak terduga pada saat ini. Jadi apa yang membuat Anda berpikir itu berfungsi seperti kutipan?
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
Darth
sumber
Saya pikir ini mungkin akan membantu, jika dijelaskan apa fungsinya. Sepertinya melintasi seluruh folder tree, itulah yang saya inginkan. %app_path%dan %file%merupakan akar dari pohon untuk dilintasi, dan file untuk menghindari penghapusan, masing-masing. Apa itu ^, dan mengapa kita melewatkan empat token per file ke Delperintah?
LarsH
0

Untuk kecepatan, saya menggunakan delen :

delen /! a.c

TCC / LE juga memilikidelperintahyang lebih kuat:

del /[!a.c] *
paradroid
sumber
del /[!a.c] *yeldsInvalid switch - "[!a.c]".
karlphillip
@karlphillip: Berhasil, "dalam TCC / LE" .
paradroid
Aha! Tidak melihat komentar itu sebelumnya, terima kasih kawan.
karlphillip