Neden?
Bir Wildcards makalesinde " Neden bu? " Diye bir cevap bulabiliriz :
The * wildcard will match any sequence of characters
(0 or more, including NULL characters)
The ? wildcard will match a single character
(or a NULL at the end of a filename)
...
Joker karakter eşleştirme kuralları
*
Genellikle, bir istisna dışında, herhangi bir 0 veya daha fazla karakterle eşleşir (sonraki kurala bakın). Açgözlü olmayan joker karakter, maskenin geri kalanının eşleşmesi için gerektiği kadar çok veya az karakterle eşleşebilir.
*.
Maskenin sonunda, {dot} dışında herhangi bir 0 veya daha fazla karakterle eşleşir. Gerçekte, kural, * ve terminal {dot} arasında herhangi bir sayıda {dot} ve {space} karakteriyle uygulanır. Bu terim için normal ifade"[*][. ]*[.]$"
?
{Dot} dışında 0 veya bir karakter eşleştirin. 0 karakterle eşleştiği tek zaman, adın sonuna veya bir {dot} konumundan önceki konuma uymasıdır. Soru işareti, birden fazla karakter eşleştirmek için birden fazla kez kullanılabilir.
İma . Geçen bir dosya / klasör adı {nokta} ayıran temel adını ve uzantısını. Yani
dir *.
uzantısı olmayan tüm öğeleri görüntüler ve
dir *.*
sıfır veya daha fazla karaktere sahip tüm öğeleri görüntüler .
Kesin konuşursak, adlarında nokta ( ) olmayan tüm öğeleridir *.
görüntüler . (BTW, Dosyalara, Yollara ve Ad Alanlarına Ad Verme MSDN makalesi, açıkça " bir adı bir adın ilk karakteri olarak belirtmenin kabul edilebilir olduğunu" söyler ..
Yalnızca nokta noktalı dosyaları listelemenin bir yolu var mı?
Sanmıyorum Ancak, uygun bir düzenli ifadeye sahip bir geçici çözüm vardır.
PowerShell (bir Powershell konsolunda kullanılıyorsa tam kapsamlı çözüm):
:: PowerShell - no extension, full syntax
PowerShell -c "Get-ChildItem | Where-Object {$_.Name -match '^.[^\.]*$'}"
:: PowerShell - extension, alias syntax
PowerShell -c "dir | ? {$_.Name -match '^..*\...*$'}"
Cmd (yalnızca bir fikir, biraz detaylandırma gerektirebilir):
:: CMD/batch - no extension
for /F "delims=" %%G in ('dir /OGN /B ^| findstr "^.[^\.]*$"') do @echo %%~tG %%~aG %%~zG %%~nxG
:: CMD/batch - extension
for /F "delims=" %%G in ('dir /OGN /B ^| findstr "^..*\...*$"') do @echo %%~tG %%~aG %%~zG %%~nxG
Zeyilname: ikramiye ve açıklama
Name
Birleştirilmiş BaseName
ve Extension
tutmayan sezgisel bir tahmin . Aşağıdaki komut dosyası, onun kullanımını cmd
ve PowerShell
temel özelliklerini kanıtlar ve garip ^..*\...*$
regex, sonuçlarından elde edilir.
@ECHO OFF
SETLOCAL EnableExtensions DisableDelayedExpansion
set "_workingDirectory=%~1"
if "%_workingDirectory%"=="%tmp%\tests_SU_1193102" (
>NUL 2>&1 (
mkdir "%_workingDirectory%"
pushd "%_workingDirectory%"
rem make directories
mkdir .Fldr-Ext
mkdir aFldr-Ext
mkdir .Fldr.Ext
mkdir aFldr.Ext
rem create files
copy NUL .File-Ext
copy NUL aFile-Ext
copy NUL .File.Ext
copy NUL aFile.Ext
popd
)
) else if "%_workingDirectory%"=="" set "_workingDirectory=%CD%"
pushd "%_workingDirectory%"
set "_first=ItemName Attributes BaseName Extension"
echo ON
:: dir /OGN | findstr "Ext$"
for /F "delims=" %%G in ('dir /OGN /B') do @((if defined _first (echo %_first%&echo(&set "_first="))&echo %%~nxG %%~aG %%~nG %%~xG)
:: Get-ChildItem | Select-Object -Property Mode, BaseName, Extension, Name
PowerShell -c "dir | select -pr Name, Mode, BaseName, Extension | sort -pr @{Expression='Mode';Descending=$true}, @{Expression='Name';Descending=$false}"
Çıktı :
==> D:\bat\BaseName_vs_Extension.bat "%tmp%\tests_SU_1193102"
==> for /F "delims=" %G in ('dir /OGN /B') do @((if defined _first (echo ItemName Attributes BaseName Extension & echo( & set "_first=" ) ) & echo %~nxG %~aG %~nG %~xG )
ItemName Attributes BaseName Extension
.Fldr.Ext d---------- .Fldr .Ext
.Fldr-Ext d---------- .Fldr-Ext
aFldr.Ext d---------- aFldr .Ext
aFldr-Ext d---------- aFldr-Ext
.File.Ext --a-------- .File .Ext
.File-Ext --a-------- .File-Ext
aFile.Ext --a-------- aFile .Ext
aFile-Ext --a-------- aFile-Ext
==> PowerShell -c "dir | select -pr Name, Mode, BaseName, Extension | sort -pr @{Expression='Mode';Descending=$true}, @{Expression='Name';Descending=$false}"
Name Mode BaseName Extension
---- ---- -------- ---------
.Fldr.Ext d----- .Fldr.Ext .Ext
.Fldr-Ext d----- .Fldr-Ext .Fldr-Ext
aFldr.Ext d----- aFldr.Ext .Ext
aFldr-Ext d----- aFldr-Ext
.File.Ext -a---- .File .Ext
.File-Ext -a---- .File-Ext
aFile.Ext -a---- aFile .Ext
aFile-Ext -a---- aFile-Ext
BaseName
Özellik tanımını karşılaştırın , dosya ve klasörler için farklı:
PS D:\PShell> Get-ChildItem | Get-Member -Name BaseName | Format-List -property TypeName, Definition
TypeName : System.IO.DirectoryInfo
Definition : System.Object BaseName {get=$this.Name;}
TypeName : System.IO.FileInfo
Definition : System.Object BaseName {get=if ($this.Extension.Length -gt
0){$this.Name.Remove($this.Name.Length -
$this.Extension.Length)}else{$this.Name};}
Benim asıl cevap affedilmez yanlış anlama dayanıyordu:
Oku dir /?
, kullan dir /A:-D
:
/A Displays files with specified attributes.
attributes D Directories R Read-only files
H Hidden files A Files ready for archiving
S System files I Not content indexed files
L Reparse Points - Prefix meaning not
Diğer bir yaklaşım: uygulamak findstr
regex olarakdir *.* | findstr /V "<.*>"