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?

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.


+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

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

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

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

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] *

del /[!a.c] *yeldsInvalid switch - "[!a.c]".
— karlphillip

@karlphillip: Berhasil, "dalam TCC / LE" .
— paradroid

Aha! Tidak melihat komentar itu sebelumnya, terima kasih kawan.
— karlphillip
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.