cmd.exe: "del * .txt" juga menghapus * .txt1 dll [duplikat]

8

Kemungkinan Gandakan:
Perintah dir WinXP: ekstensi char 3 dan 4 sama?

Saya telah terganggu oleh perilaku aneh cmd.exe untuk waktu yang lama (setidaknya WinXP dan Windows7). Perintah seperti del *.txtjuga akan menghapus *.txt1file (sejumlah karakter setelah '.txt' akan dilakukan). Apakah ini bug yang terkenal atau apa?

Komunitas
sumber

Jawaban:

8

Ini kadang-kadang ditemui agak dikenal?

Penjelasan tentang perilaku ada di sini , lengkap dengan kemungkinan penyelesaiannya.

Rangkuman: Itu berasal dari cara NTFS menangani nama file pendek (8.3), untuk kompatibilitas dengan hal-hal yang lebih tua yang tidak dapat menangani nama file panjang "baru-ketinggalan jaman". dir /xdapat digunakan untuk melihat nama file pendek, seperti:

C:\>dir /x *~*
 ...
02/25/2011  08:18 AM    <DIR>          DOCUME~1     Documents and Settings
05/28/2011  12:02 AM    <DIR>          PROGRA~1     Program Files
 ...

Ekstensi yang lebih panjang dari tiga karakter hanya akan dipotong karena nama file pendeknya; jadi .txt1, .txtxtxtxt, .txt_file, dll, semua menjadi .txt.

Jim Davis
sumber
6

File dengan lebih dari 4 huruf dalam ekstensi (dan aturan lain tentu saja juga berlaku), dapatkan nama pendek, jadi misalnya "foo.txt1" memiliki nama pendek "foo ~ 1.txt". DEL(seperti DIRdan mungkin sebagian besar cmd.exeperintah builtin lainnya ) juga akan beroperasi pada nama pendek. Untuk diskusi tentang topik terkait lihat di sini: http://blogs.msdn.com/b/oldnewthing/archive/2005/07/20/440918.aspx

Christian.K
sumber
+1 untuk tautan yang lebih otoritatif daripada tautan saya.
Jim Davis
2

Apakah ini pada sistem file FAT / VFAT? Jika demikian, Anda digigit oleh peretasan yang digunakan untuk mewakili nama yang tidak cocok dengan skema 8.3; ada DIRopsi yang menunjukkan nama pendek yang rusak, yang akan dimulai dengan nama file sebenarnya tetapi memiliki ~dan nomor sebelum ekstensi, kemudian ekstensi dibatasi pada 3 karakter. (Contoh: C:\Program Filesbiasanya diterjemahkan menjadi C:\PROGRA~1.) Kartu liar mungkin secara tak terduga cocok dengan nama-nama ini. Ini seharusnya tidak terjadi pada NTFS atau (saya pikir) di jaringan berbagi. kecuali bahwa DOS masih belum mati, tampaknya ....

geekosaurus
sumber
2

Anda mungkin dapat menggunakan Forfilesperintah untuk solusi

Misalnya.

Forfiles  -s -m *.txt -c "cmd /C del /q @path"

Hanya cocok dengan txtujung.

phuclv
sumber