왜 그런 겁니까?
와일드 카드 기사 에서 " 왜 그 이유는 무엇입니까? "에 대한 답변을 찾을 수 있습니다 .
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)
…
와일드 카드 일치 규칙
*
일반적으로 하나 이상의 예외를 제외하고 0 개 이상의 문자와 일치합니다 (다음 규칙 참조). 욕심없는 와일드 카드는 마스크의 나머지 부분을 일치시키는 데 필요한만큼의 문자를 자유롭게 일치시킬 수 있습니다.
*.
마스크 끝에서 {dot}을 제외한 0 개 이상의 문자와 일치합니다. 실제로, 규칙은 *와 터미널 {dot} 사이에 임의의 수의 {dot} 및 {space} 문자로 적용됩니다. 이 용어의 정규식은"[*][. ]*[.]$"
?
{dot}을 제외하고 0 또는 1 개의 문자를 찾습니다. 0 문자와 일치하는 유일한 시간은 이름의 끝 또는 {dot} 앞의 위치와 일치 할 때입니다. 물음표는 여러 문자와 일치시키기 위해 두 번 이상 사용될 수도 있습니다.
시사점 . 파일 / 폴더 이름 의 마지막 {dot}은 기본 이름과 확장자를 구분 합니다. 그래서
dir *.
확장명 이 없는 모든 항목을 표시 하고
dir *.*
확장자가 0 자 이상인 모든 항목을 표시 합니다 .
엄밀히 말하면 name에 마침표 ( ) 가 없는 모든 항목이dir *.
표시됩니다 . (BTW, 이름 지정 파일, 경로 및 네임 스페이스 MSDN 기사에 따르면 " 이름의 첫 문자로 마침표를 지정할 수 있습니다 " 라고 명시 되어 있습니다..
점이있는 파일 만 나열 할 수있는 방법이 있습니까?
나는 그렇게 생각하지 않습니다. 그러나 정규식에 맞는 해결 방법이 있습니다.
PowerShell (Powershell 콘솔에서 사용되는 경우 전체 범위 솔루션) :
:: PowerShell - no extension, full syntax
PowerShell -c "Get-ChildItem | Where-Object {$_.Name -match '^.[^\.]*$'}"
:: PowerShell - extension, alias syntax
PowerShell -c "dir | ? {$_.Name -match '^..*\...*$'}"
Cmd (아이디어 만 필요할 수 있음) :
:: 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
부록 : 보너스와 설명
Name
연결 BaseName
되어 Extension
있지 않은 직관적 인 추측 . 다음 스크립트는 핵심 기능을 사용 cmd
하고 있음을 증명 PowerShell
하며 이상한 ^..*\...*$
정규식은 결과에서 파생됩니다.
@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}"
출력 :
==> 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
파일과 폴더에 따라 속성 정의를 비교하십시오 .
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};}
내 원래의 대답 은 용서할 수없는 오해에 기초한 것입니다.
읽고 dir /?
사용하십시오 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
다른 접근법 : findstr
정규식을 다음 과 같이 적용하십시오.dir *.* | findstr /V "<.*>"