Вопрос или проблема
dir /a:d-l /b .*
.nuget
dir /a:d-l /b *.*
.nuget
A.B
AppData
Contacts
Рабочий стол
Документы
Загрузки
Избранное
Профили IntelGraphics
Ссылки
Музыка
Изображения
Сохраненные игры
Поиск
source
Видео
Я попробовал dir /a:d /b *^.*
, но он выводит все каталоги, так же как и предыдущая команда. Как вывести только те каталоги, которые имеют хотя бы одну точку между символами в своих именах?
Используйте *.<
или <.<
в качестве подстановочного знака.
dir "*.<"
Настоящая причина, по которой <
>
"
не разрешены в именах файлов Windows, заключается в том, что они также являются подстановочными знаками в коде сопоставления шаблонов, основанном на DOS. (Смотрите [MS-FSA] 2.1.4.3 и [MS-FSA] 2.1.4.4, или поиск на GitHub по терминам DOS_STAR, DOS_DOT, DOS_QM.)
В этом случае <
также известный как DOS_STAR соответствует 0 или более символам до последней .
в имени (предполагаемое использование, как кажется, для сопоставления расширений файлов, например, <txt
вместо *.txt
), но из-за способа реализации, его использование после точки заставит эту точку также соответствовать явно.
(Это, вероятно, реликт со времен имен MS-DOS 8dot3, где точка, разделяющая поля ‘имя’ и ‘расширение’, была неявно присутствующей, поэтому *.* соответствовало каждому имени – и программы ожидали, что это продолжит работать даже после того, как Windows 95 сделала точку в именах явной.)
В качестве альтернативы: перейдите на PowerShell, который использует собственное сопоставление подстановочных знаков с более юниксоподобной семантикой, в котором *.*
делает то, что вы ожидаете.
Вы можете использовать dir с помощью find…
dir /ad /b |find "."
Ответ или решение
Для того чтобы отобразить только те директории, в названиях которых есть хотя бы одна точка между символами, вы можете воспользоваться несколькими командами в командной строке Windows.
Способы:
-
Использование встроенных команд:
Вы можете использовать команду
dir
вместе с фильтрацией черезfind
. Вот как это можно сделать:dir /ad /b | find "."
В этой команде:
/ad
указывает на отображение только директорий./b
выводит только имена директорий в базовом формате (без дополнительных данных).| find "."
фильтрует только те результаты, которые содержат хотя бы одну точку в названии.
-
Использование специальных символов как подстановочных знаков:
Альтернативный подход включает в себя использование символов подстановки для выбора директорий с точками. Выполните следующую команду:
dir "*.*"
В этом случае:
*.*
выберет все директории, в названиях которых есть точка, так как синтаксис*.*
интерпретируется как "любое количество символов до точки, затем точка и любое количество символов после".
-
Переход в PowerShell:
Если вам более удобно работать с PowerShell, вы можете использовать следующую команду:
Get-ChildItem -Directory | Where-Object { $_.Name -like "*.*" }
Эта команда:
Get-ChildItem -Directory
получает список всех директорий в текущем каталоге.Where-Object { $_.Name -like "*.*" }
фильтрует результаты и выводит только те директории, имена которых содержат хотя бы одну точку.
Заключение:
Выбор метода зависит от ваших предпочтений. Команда dir
с фильтрацией через find
является простым и эффективным способом, в то время как PowerShell предоставляет более гибкие возможности для выполнения фильтрации и работы с объектами.