Я думаю, что @dsolimano (и его источник, Раймонд Чен) довольно близко подошли к вашей проблеме, но, возможно, не совсем правильно объяснили. После некоторых размышлений, поиска и тестирования, хотя мне еще предстоит подготовить документацию, подтверждающую это, я считаю, что пришел к достаточно точному выводу.
Моя гипотеза основана на несколько связанном поведении доменных имен и некоторых других именованных компьютерных ресурсов. С доменными именами на самом деле есть подразумеваемая конечная точка в конце. Поэтому www.superuser.com на самом деле www.superuser.com. , Мой вывод, после некоторого тестирования, заключается в том, что Windows API (если не сама файловая система) использует то же соглашение для имен файлов.
Подумайте обо всех именах файлов, которые вы дали, которые соответствуют вашему результату. Если учесть, что имена файлов 8.3 включены в поиск, как описано здесь, и предположить, что длинные имена файлов с конечной точкой и имена файлов 8.3 с конечной точкой также включены, вы увидите, что каждый из этих файлов соответствует по крайней мере одному версия его имени файла. (Помните, что подстановочный знак * - это заполнитель, который представляет «любое количество символов или нет символов».)
c:\test\1.1.1990.txt соответствует 1.1.1990.txt. или 111990~1.TXT.
c:\test\1.31.1990.txt соответствует 1.31.1990.txt. или 131199~1.TXT.
c:\test\1.txttxt соответствует 1.txttxt. или 1956B~1.TXT.
c:\test\11.11.2007.txtGif соответствует 111120~1.TXT.
c:\test\12.1.1990.txt соответствует 12.1.1990.txt. или 12199~1.TXT.
c:\test\12.31.1990.txt соответствует 12.31.1990.txt или 123119~1.TXT.
c:\test\2.tGift соответствует 2.tGift.
c:\test\2.txtGif соответствует 2BEFD~1.TXT.
c:\test\5bbb.exeTxt соответствует 5bbb.exeTxt.
c:\test\test.txt соответствует как test.txt или test.txt.
Вы можете проверить это, создав серию тестовых файлов в C:\test как описано ниже, и снова запустив dir *t.* .
- Файл с расширением, оканчивающимся на "t".
- Файл с именем, оканчивающимся на "t".
- Файл с расширением более трех букв, третья буква которого - "t".
- Некоторые файлы, которые соответствуют более чем одному из вышеуказанных критериев.
- Файл с именем, оканчивающимся на "t", и вообще без расширения.
- Некоторые файлы, которые не соответствуют ни одному из вышеуказанных критериев.
Вы должны видеть, как и я, что dir *t.* Будет возвращать только файлы, которые попадают в категории 1-5 выше. Файлы в категории 6 будут исключены. Вы также можете использовать метод GetFiles более непосредственно для тех же файлов с помощью PowerShell, используя приведенную ниже команду, и вы должны увидеть те же результаты.
[IO.Directory]::GetFiles('C:\test','*t.*')