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.
Nah, itu penjelasan yang cukup bagus tentang mengapa - tetapi sepertinya tidak ada cara untuk kemudian memaksa perintah dir untuk mengabaikan file aspx?
chris
1
@ Chris: Tidak. Tapi kamu juga bisa menghapus 8,3 nama dari sistem Anda (kemungkinan akan menghemat banyak masalah nanti), atau memfilternya dir output dengan dir /b/s *.asp | findstr /ile .asp - ini membuang garis yang tidak berakhir dengan .asp.
grawity
Menurut jawaban ini kamu bisa memakai fsutil 8dot3name strip directory untuk menghapus nama yang ada, tidak perlu mengubah nama mereka
itu bukan bug, sesuai jawaban grawity. Tetapi mengapa Anda meninggalkan ruang di ujung aspx?
phuclv
1
@ phuclv, yang tertinggal ruang harus dihapus, karena itu menjadi bagian dari string pencarian sebaliknya; bagaimanapun, pendekatan ini juga akan mengecualikan file yang dimiliki .aspx suatu tempat di tengah nama mereka, seperti file.aspx.name.asp, yang seharusnya dimasukkan ...
aschipfl
0
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 ...
dir
output dengandir /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 merekaTentu saja ini bervariasi sesuai dengan apa yang diperintahkan penerjemah
DIR
perintah yang digunakan. ItuDIR
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 CMDDIR
perintah.) Jadi ada cara untuk mengatasi ini yang tidak memerlukanFSUTIL
dan hak administrator.sumber
Menarik - tampaknya menjadi bug ...
Mempertimbangkan, saya akan mengirimkan melalui find seperti:
sumber
.aspx
suatu tempat di tengah nama mereka, sepertifile.aspx.name.asp
, yang seharusnya dimasukkan ...Jika Anda memiliki PowerShell , kamu bisa memakai:
Jika Anda tidak memiliki PowerShell, mengapa tidak?
sumber
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 olehdir
:Ini bahkan tidak cocok dengan file yang dimiliki
.asp
suatu tempat di nama mereka (sepertifile.asp.aspx
), juga tidak mengecualikan file yang memiliki.aspx
dalam nama mereka (sepertifile.aspx.asp
).Tombol
/B
maridir
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 daridir
: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 dalamPATHEXT
; untuk menghindari itu, Anda dapat menghapus sementaraPATHEXT
variabel (olehset "PATHEXT_BACKUP=%PATHEXT%" & set "PATHEXT="
) dan pulihkan nanti (denganset "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 ...
sumber