Когда я бегу, dir *.*
это дает неожиданные результаты. Даже файлы и папки без какой-либо точки в их именах перечислены. Например
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
Почему это? Есть ли способ перечислить только файлы с точкой?
.
которые.
в конце не содержат слов, которые они имеют, для многих целей, включая эту..
символ, имеют.
в конце подразумеваемый символ. - Например, у вас может быть папка с именем «Blah.old», и тогда у нее будет традиционное трехбуквенное расширение файла; для повседневного использования, хотя «Blah
» - это то же самое, что и «Blah.
», будь то файл или папка..
, а метки в DNS-именах разделены.
(таким образом, имя корневой DNS-зоны представляет собой одну метку нулевой длины). Один дочерний элемент корневой DNS-зоны.
естьcom.
, а один дочернийcom.
-superuser.com.
и т. Д.Ответы:
Я пишу этот ответ, потому что OP подчеркнул, что:
Команда
DIR
приходит со времени, когда:Поэтому под этим стандартом
*.*
подразумевается любое имя и любое расширение . Это не означает строку, содержащую «.», Которая может содержать или не содержать символы до или после «.» ,Политика Microsoft сохраняет обратную совместимость. Следовательно, это толкование
*.*
сохраняется.Но в Windows PowerShell
*.*
означает строку, содержащую «.», Которая может содержать или не содержать символы до или после «.» ,источник
Folder.
" и папка с именем "Folder
" имеют одно и то же имя в отношении окон.AA.BB
с <8 в первой части и <3 в расширении? Это просто с пробелами?Почему это?
Ответ на вопрос « Почему это так? » Можно найти в статье Wildcards :
Смысл . Последний {точка} в имени файла / папки отделяет базовое имя и расширение. Так
dir *.
отображает все элементы без расширения иdir *.*
отображает все элементы с расширением от нуля или более символов .Строго говоря,
dir *.
отображает все элементы без точки (.
) в имени . (Кстати, в статье MSDN , названии файлов, путей и пространств имен явно сказано, что « допустимо указывать точку в качестве первого символа имени ».)Есть ли способ перечислить только файлы с точкой?
Я так не думаю. Однако есть обходной путь с подходящим регулярным выражением.
PowerShell (полное решение, если оно используется в консоли Powershell):
Cmd (только идея, может потребовать некоторой проработки):
Приложение: бонус и объяснение
Интуитивное предположение,
Name
которое объединеноBaseName
иExtension
не имеет места . Следующий скрипт доказывает его использованиеcmd
иPowerShell
основные функции, и странное^..*\...*$
регулярное выражение выводится из его результатов.Выход :
Сравните определение
BaseName
свойства, различного для файлов и папок:Мой первоначальный ответ был основан на непростительном недоразумении:
Читатьdir /?
, использоватьdir /A:-D
:Другой подход: применитьfindstr
регулярное выражение какdir *.* | findstr /V "<.*>"
источник
*.*
совпадает со всеми файлами , как указано в вопросе.
лайка.dbus-keyrings
,.VirtualBox
и.vscode
.dir /A:-D
перечисляет только файлы, которые счастливы?dir /A:-D
это неверно. 1 / в нем перечислены файлы без расширения. 2 / в нем нет каталогов, в которых есть.
имена (совершенно законные)Вы можете сопоставлять имена файлов с точкой, используя недокументированный подстановочный знак
<
, который соответствует либо последовательности из 0 или более символов в базовом имени, либо последовательности из 0 или более символов в расширении:Помните, что
<
это также метасимвол, поэтому вы должны заключать его в кавычки или экранировать всякий раз, когда используете его в шаблоне из командной оболочки.источник
Интерпретатор командной строки увидит « . » Как «Все базовые имена файлов» со «всеми расширениями». Пустое расширение все еще является расширением , поэтому будет сопоставлено и возвращено со списком. Как объяснили другие, это похмелье от более ранних версий Windows и MS-DOS.
Если вы счастливы смотреть с помощью PowerShell, найти эти файлы намного проще. Обратите внимание, что в PowerShell «dir» является псевдонимом командлета «Get-ChildItem».
Чтобы найти все файлы (не каталоги / папки), которые имеют расширение (например, «myfile.txt», но не «FileWithNoExt»):
ключ "-af" является сокращением для "-File", который ограничивает возвращаемые объекты только файлами. «-ad» получит только каталоги. "\" означает «буквальный символ точки». Без обратной косой черты точка будет соответствовать любому символу в соответствии со стандартным регулярным выражением.
Чтобы получить все файлы, в имени которых была точка, без расширения, а также с расширением (например, «myDocument_v1.1.doc», но не «myfile.txt»):
Однако обратите внимание, что это исключит файл с именем, например «.archive», с предыдущей точкой. Это потому, что он рассматривается как не имеющий базового имени и расширения «архив». Если вы хотите включить это:
Здесь шаблон совпадения говорит: «Буквальная точка, OR (|) BeginningOfString (^), за которой следует EndOfString ($) (т.е. пустая строка)». Поскольку файл не может иметь как пустое базовое имя, так и расширение, он найдет файлы, начинающиеся с точки.
источник
ls *.*
достаточно, как многие другие ответили перед вамиЕсли вы введете указанную выше команду, то здесь: * (это подстановочный знак, означающий любую последовательность символов), за которым следует точка (.), За которой следует *. Это можно интерпретировать как показ всех файлов с именами, такими как (любая последовательность символов) ). (любая последовательность символов), что дополнительно означает, что отображаются все файлы с любым расширением.
источник
Program Files
включен в список? Это не соответствует шаблону<sequence of characters>.<sequence of characters>
.