Lebih
Mengapa `dir *.*` beri aku semua file dan folder?
Ketika saya menjalankan dir *.*
ini menghasilkan hasil yang tak terduga. Bahkan file dan folder tanpa titik di nama mereka terdaftar. Misalnya
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 daftar file hanya dengan sebuah titik?
62
5
Saya menulis jawaban ini karena OP telah menekankan bahwa:
The
DIR
perintah berasal dari waktu ketika:Oleh karena itu, dengan standar itu,
*.*
berarti whatever nama dan apapun extension. Itu tidak berarti a string yang berisi ".", yang mungkin atau mungkin tidak memiliki karakter sebelum atau setelah ".".Kebijakan Microsoft adalah menjaga kompatibilitas. Oleh karena itu, bahwa penafsiran
*.*
dipertahankan.Tapi di Windows PowerShell,
*.*
berarti a string yang berisi ".", yang mungkin atau mungkin tidak memiliki karakter sebelum atau setelah ".".Mengapa demikian?
Satu dapat menemukan jawaban untuk "Mengapa demikian?" di Wildcard artikel:
Implikasi. Yang terakhir {dot} di file/folder nama memisahkan dasar nama dan ekstensi. Jadi
dir *.
display semua barang dengan tidak ada ekstensi, dandir *.*
menampilkan semua barang dengan ekstensi dari nol atau lebih karakter.Tegasnya,
dir *.
display semua barang dengan tidak ada masa (.
) nama. (BTW, [Penamaan File, Jalan, dan ruang Nama][2] MSDN artikel kata explicitly bahwa "hal ini dapat diterima untuk menentukan periode sebagai karakter pertama dari nama".)Apakah ada cara untuk daftar file hanya dengan sebuah titik?
Saya don't pikir begitu. Namun, ada solusi dengan pas ekspresi reguler.
PowerShell (full lingkup solusi jika digunakan dalam Powershell konsol):
Cmd (ide saja, mungkin memerlukan beberapa elaborasi):
Tambahan: bonus dan penjelasan
Intuitif menebak bahwa
Nama
yang bersambungBaseName
danEkstensi
tidak tahan. Script berikut membuktikan hal itu dengan menggunakancmd
danPowerShell
fitur inti, dan aneh^..*\...*$
regex adalah berasal dari it's hasil.Output:
Bandingkan ** definisi
BaseName
akses yang berbeda untuk file dan folder:Saya jawaban asli didasarkan pada dimaafkan kesalahpahaman:
<menyerang> Baca `dir /?`, gunakan `dir /A-D`:Pendekatan lain: menerapkan
findstr
regex sebagaidir *.* | findstr /V "<.*>"
</strike>[2]: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs. 85).aspx
Anda dapat mencocokkan nama file dengan dot dengan menggunakan berdokumen wildcard
<
, yang cocok baik berurutan dari 0 atau lebih karakter dalam basename atau urutan 0 atau lebih karakter dalam ekstensi:Baris Perintah Penerjemah akan melihat "." seperti "Semua dasar nama file" dengan "semua ekstensi". Kosong ekstensi masih ekstensi, sehingga akan dicocokkan dan kembali dengan daftar. Seperti yang sudah dijelaskan, ini adalah mabuk dari versi sebelumnya dari Windows dan MS-DOS.
Jika anda're senang untuk melihat menggunakan PowerShell, menemukan file-file ini adalah jauh lebih mudah. Perhatikan bahwa di PowerShell, "dir" adalah sebuah alias untuk "Get-ChildItem" cmdlet.
Untuk menemukan semua file (bukan direktori/folder) yang memiliki ekstensi (misalnya "myfile.txt", tetapi tidak "FileWithNoExt"):
"-af" switch merupakan singkatan dari " Berkas-" yang membatasi kembali benda-benda untuk file saja. "-ad" hanya akan mendapatkan direktori. "\." yang berarti "secara harfiah dot karakter". Tanpa backslash, dot akan cocok dengan karakter apapun, sesuai dengan standar regex.
Untuk mendapatkan semua file di mana ada sebuah titik dalam nama tanpa ekstensi, serta ekstensi (misalnya "myDocument_v1.1.doc" tetapi tidak "myfile.txt"):
Namun perlu dicatat, bahwa hal ini akan mengecualikan file dengan nama seperti ".arsip" dengan sebelumnya dot. Hal ini karena itu's diperlakukan sebagai tidak memiliki basename dan perpanjangan dari "archive". Jika anda ingin seperti ini:
Di sini, mencocokkan pola yang mengatakan "secara harfiah dot, ATAU(|) BeginningOfString(^) diikuti oleh EndOfString($) (yaitu string kosong)". Karena file bisa't memiliki kedua kosong basename dan perpanjangan, maka akan menemukan file yang dimulai dengan sebuah titik.
Jika anda mengetik perintah di atas, maka di sini: