Ketika saya menjalankannya dir *.*
menghasilkan hasil yang tidak terduga. Bahkan file dan folder tanpa titik di namanya terdaftar. Sebagai contoh
C:\>dir *.*
Volume in drive C is System
Volume Serial Number is AC0A-29DA
Directory of C:\
14-03-2017 05:17 PM 8,192 ntuser.dat
03-01-2017 07:10 PM <DIR> Perl520
28-03-2017 10:13 AM <DIR> Program Files
28-03-2017 10:13 AM <DIR> Program Files (x86)
04-01-2017 03:25 PM <JUNCTION> Python27 [C:\Program Files\Anaconda]
06-02-2017 10:16 PM <DIR> SAP
28-03-2017 04:10 PM 152 useragent.log
03-01-2017 03:04 PM <DIR> Users
16-03-2017 04:24 PM <DIR> VM
22-03-2017 11:13 AM <DIR> Windows
2 File(s) 8,344 bytes
8 Dir(s) 270,172,966,912 bytes free
Mengapa demikian? Apakah ada cara untuk mendaftar hanya file dengan titik?
.
seperti yang mereka miliki.
pada akhirnya untuk banyak tujuan, termasuk yang ini..
karakter memiliki.
karakter tersirat di akhir. - Anda dapat memiliki memiliki folder bernama "Blah.old" misalnya, dan kemudian akan memiliki ekstensi file 3 huruf tradisional; untuk penggunaan sehari - hari meskipun "Blah
" sama dengan "Blah.
" apakah itu file atau folder..
, dan label dalam nama DNS dipisahkan oleh.
(dengan demikian nama zona DNS root adalah label panjang nol tunggal). Satu anak dari zona DNS root.
adalahcom.
, dan satu anak daricom.
adalahsuperuser.com.
, dan seterusnya.Jawaban:
Saya menulis jawaban ini karena OP telah menekankan bahwa:
The
DIR
perintah berasal dari waktu ketika:Oleh karena itu, dengan standar itu,
*.*
berarti apa pun nama dan ekstensi apa pun . Itu tidak berarti string yang mengandung ".", Yang mungkin atau mungkin tidak memiliki karakter sebelum atau sesudah "." .Kebijakan Microsoft menjaga kompatibilitas ke belakang. Oleh karena itu, interpretasi
*.*
tersebut dipertahankan.Tetapi di Windows PowerShell,
*.*
berarti string yang berisi ".", Yang mungkin atau mungkin tidak memiliki karakter sebelum atau sesudah "." .sumber
Folder.
", dan folder bernama "Folder
" dinamai hal yang sama, sejauh menyangkut windows.AA.BB
dengan <8 di bagian pertama dan <3 di ekstensi? Apakah itu hanya pad dengan spasi?Mengapa demikian?
Orang dapat menemukan jawaban untuk " Mengapa begitu? " Dalam artikel Wildcard :
Implikasi . The terakhir {dot} dalam file / nama folder memisahkan nama dasar dan ekstensi. Begitu
dir *.
menampilkan semua item tanpa ekstensi , dandir *.*
menampilkan semua item dengan ekstensi nol atau lebih karakter .Sebenarnya,
dir *.
menampilkan semua item tanpa titik (.
) dalam nama . (BTW, File Penamaan, Paths, dan Namespaces artikel MSDN mengatakan secara eksplisit bahwa " dapat diterima untuk menentukan periode sebagai karakter pertama dari nama ".)Apakah ada cara untuk mendaftar hanya file dengan titik?
Saya kira tidak. Namun, ada solusi dengan ekspresi reguler yang pas.
PowerShell (solusi lingkup penuh jika digunakan dalam konsol Powershell):
Cmd (hanya ide, mungkin memerlukan elaborasi):
Tambahan: bonus dan penjelasan
Tebakan intuitif yang
Name
digabungkanBaseName
danExtension
tidak berlaku . Script berikut membuktikannya menggunakancmd
danPowerShell
fitur inti, dan regex aneh^..*\...*$
berasal dari hasil itu.Keluaran :
Bandingkan definisi
BaseName
properti, berbeda untuk file dan folder:Jawaban asli saya didasarkan pada kesalahpahaman yang tak termaafkan:
Bacadir /?
, gunakandir /A:-D
:Pendekatan lain: terapkanfindstr
regex sebagaidir *.* | findstr /V "<.*>"
sumber
*.*
cocok dengan semua file , seperti yang dinyatakan dalam pertanyaan.
sejenisnya.dbus-keyrings
,.VirtualBox
dan.vscode
.dir /A:-D
daftar hanya file yang senang?dir /A:-D
salah. 1 / daftar file tanpa ekstensi. 2 / tidak mencantumkan direktori yang memiliki.
nama mereka (sah menurut hukum)Anda dapat mencocokkan nama file dengan sebuah titik dengan menggunakan wildcard tidak berdokumen
<
, yang cocok dengan urutan 0 atau lebih karakter dalam nama dasar atau urutan 0 atau lebih karakter dalam ekstensi:Ingat itu
<
juga merupakan metacharacter, jadi Anda perlu mengutip atau menghindarinya setiap kali menggunakannya dalam pola dari command shell.sumber
Penerjemah Baris Perintah akan melihat " . " Sebagai "Semua nama file dasar" dengan "semua ekstensi". Ekstensi kosong masih merupakan ekstensi , jadi akan dicocokkan dan dikembalikan dengan daftar. Seperti yang dijelaskan orang lain, ini adalah hangover dari versi Windows dan MS-DOS sebelumnya.
Jika Anda senang melihat menggunakan PowerShell, menemukan file-file ini jauh lebih mudah. Perhatikan bahwa di PowerShell, "dir" adalah alias untuk cmdlet "Get-ChildItem".
Untuk menemukan semua file (bukan direktori / folder) yang memiliki ekstensi (mis. "Myfile.txt", tetapi bukan "FileWithNoExt"):
switch "-af" adalah kependekan dari "-File" yang membatasi objek yang dikembalikan ke file saja. "-ad" hanya akan mendapatkan direktori. "\." berarti "karakter titik literal". Tanpa garis miring terbalik, titik akan cocok dengan karakter apa pun, sesuai regex standar.
Untuk mendapatkan semua file di mana ada titik dalam nama tanpa ekstensi, serta ekstensi (mis. "MyDocument_v1.1.doc" tetapi bukan "myfile.txt"):
Namun perlu dicatat, bahwa ini akan mengecualikan file dengan nama seperti ".archive" dengan titik sebelumnya. Ini karena dianggap tidak memiliki nama dasar dan ekstensi "arsip". Jika Anda ingin memasukkan ini:
Di sini, pola kecocokan mengatakan "Titik literal, OR (|) BeginningOfString (^) diikuti oleh EndOfString ($) (yaitu string kosong)". Karena file tidak dapat memiliki nama samaran dan ekstensi yang kosong , ia akan menemukan file yang dimulai dengan titik.
sumber
ls *.*
sudah cukup, karena banyak orang lain telah menjawab sebelum AndaJika Anda mengetik perintah di atas, maka di sini: * (ini adalah kartu liar yang berarti urutan karakter) diikuti oleh titik (.) Diikuti oleh * ini dapat diartikan sebagai menunjukkan semua file yang memiliki nama seperti (urutan karakter apa pun) ) (urutan karakter apa pun) yang selanjutnya berarti menampilkan semua file dengan ekstensi apa pun.
sumber
Program Files
dimasukkan dalam daftar? Itu tidak cocok dengan polanya<sequence of characters>.<sequence of characters>
.