Jawaban:
dir /x
Untuk alasan kompatibilitas, Windows menghasilkan a 8,3 nama untuk setiap nama file yang panjang dibuat, dan kode pencocokan wildcard ( FindFirstFile()
) memeriksa kedua nama asli dan singkat. Menggunakan dir /x
untuk melihat nama pendek apa yang ditugaskan untuk setiap file.
Bagian "ekstensi" dari nama 8.3 adalah selalu dibuat dengan hanya memotong ekstensi terakhir hingga paling banyak 3 karakter: .aspx
untuk .ASP
Saat menggunakan sistem file NTFS, 8.3 nama penciptaan dapat dinonaktifkan di seluruh sistem menggunakan:
fsutil behavior set disable8dot3
Namun, ini tidak akan mempengaruhi ada nama. Kamu harus ganti nama setiap file dan kemudian ganti namanya kembali ke nama aslinya.
Lihat juga: Pencarian direktori di Windows Command Prompt menunjukkan output yang salah!
dir
output dengan dir /b/s *.asp | findstr /ile .asp
- ini membuang garis yang tidak berakhir dengan .asp
.
fsutil 8dot3name strip directory
untuk menghapus nama yang ada, tidak perlu mengubah nama mereka
Tentu saja ini bervariasi sesuai dengan apa yang diperintahkan penerjemah DIR
perintah yang digunakan. Itu DIR
perintah di Take Command , sebagai contoh, hanya cocok dengan nama yang panjang secara default dan jadi tidak menunjukkan perilaku ini. ( Pencocokan nama pendek dan panjang dapat dihidupkan untuk kompatibilitas dengan CMD DIR
perintah.) Jadi ada cara untuk mengatasi ini yang tidak memerlukan FSUTIL
dan hak administrator.
Menarik - tampaknya menjadi bug ...
Mempertimbangkan, saya akan mengirimkan melalui find seperti:
dir /s *.asp | find /i /v ".aspx "
.aspx
suatu tempat di tengah nama mereka, seperti file.aspx.name.asp
, yang seharusnya dimasukkan ...
Jika Anda memiliki PowerShell , kamu bisa memakai:
dir *.asp -r | remove-item
Jika Anda tidak memiliki PowerShell, mengapa tidak?
Sebagai pengguna grawity sudah mengatakan jawaban mereka , itu karena wildcard digunakan oleh cmd
Perintah internal dan beberapa yang eksternal juga cocok 8.3 nama file , yang diaktifkan secara default.
Untuk mengatasinya, ada beberapa cara, beberapa di antaranya ingin saya tunjukkan:
Kamu bisa memakai findstr
untuk memfilter nama file yang dikembalikan oleh dir
:
dir /S /B /A:-D "*.asp" | findstr /IEC:".asp"
Ini bahkan tidak cocok dengan file yang dimiliki .asp
suatu tempat di nama mereka (seperti file.asp.aspx
), juga tidak mengecualikan file yang memiliki .aspx
dalam nama mereka (seperti file.aspx.asp
).
Tombol /B
mari dir
mengembalikan daftar murni nama file / jalur, yang dapat difilter dengan benar. Pilihan /A:-D
tidak termasuk direktori yang cocok.
Atau, yang where
perintah dapat digunakan, yang menangani wildcard berbeda dari dir
:
where /R "." "*.asp"
Kerugiannya adalah bahwa perintah ini juga menganggap konten PATHEXT
variabel, jadi ini juga akan cocok dengan file yang berakhiran .asp.exe
, mengingat bahwa .EXE
terkandung dalam PATHEXT
; untuk menghindari itu, Anda dapat menghapus sementara PATHEXT
variabel (oleh set "PATHEXT_BACKUP=%PATHEXT%" & set "PATHEXT="
) dan pulihkan nanti (dengan set "PATHEXT=%PATHEXT_BACKUP%" & set "PATHEXT_BACKUP="
).
Jawaban ini oleh pengguna Konrad menunjukkan cara untuk mengubah perilaku standar membuat 8,3 nama file item dengan ekstensi dengan lebih dari 3 karakter, yang pada gilirannya mencegah sebagian besar kecocokan yang tidak diinginkan tersebut. Namun sayangnya ini tidak mengubah nama file 8.3 saat ini. Dan tentu saja secara teoritis bisa ada situasi di mana nama file 8,3 masih cocok meskipun sangat tidak mungkin.
Saya harus mengakui bahwa saya belum menguji ini ...