'Why does cmd DIR search include files that start with the 3 searched letters but then differ?
If in a directory I have two files, test.pro
and test.properties
, and I run dir /s *.pro
to find all files with the .pro extension, it lists both files. However, when I run dir /s *.pr
, it lists neither. Why does searching for a three-letter file extension list files with extensions that start with the three letters? How can I search for ONLY .pro files using dir?
Solution 1:[1]
The command DIR lets the file system search for file system entries (file names, directory names, reparse points (links)) matching the wildcard pattern *.pro
in long name or in short 8.3 name on short name management also enabled for the file system of current drive.
The short file name of test.pro
is TEST.PRO
.
The short file name of test.properties
is TEST~1.PRO
.
Therefore the wildcard pattern *.pro
matches test.pro
and TEST~1.PRO
displayed with long file name test.properties
.
The wildcard pattern *.pr
does not match with the two file names because of the file extension is pro
respectively properties
and not just pr
. The wildcard pattern *.pr?
would also find the file names test.pro
and TEST~1.PRO
displayed with long file name test.properties
.
There can be used %SystemRoot%\System32\where.exe /R . *.pro
to find recursively in current directory and all its subdirectories files with file extension .pro
not matching file names with a longer file extension beginning with pro
because of WHERE applies the wildcard pattern only on long file names.
DIR and also FOR use the Windows file I/O function which directly searches with the wildcard pattern *.pro
for suitable file system entries. WHERE uses the Windows file I/O function to search for *
to get a list of long names of all file system entries and then applies the wildcard pattern itself on each string returned by the file system. For that reason the usage of the wildcard pattern *.pro
returns a positive result only on test.pro
and not on test.properties
on using WHERE.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 |