Как отобразить только каталоги, в которых между символами есть точка?

Вопрос или проблема

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.

Способы:

  1. Использование встроенных команд:

    Вы можете использовать команду dir вместе с фильтрацией через find. Вот как это можно сделать:

    dir /ad /b | find "."

    В этой команде:

    • /ad указывает на отображение только директорий.
    • /b выводит только имена директорий в базовом формате (без дополнительных данных).
    • | find "." фильтрует только те результаты, которые содержат хотя бы одну точку в названии.
  2. Использование специальных символов как подстановочных знаков:

    Альтернативный подход включает в себя использование символов подстановки для выбора директорий с точками. Выполните следующую команду:

    dir "*.*"

    В этом случае:

    • *.* выберет все директории, в названиях которых есть точка, так как синтаксис *.* интерпретируется как "любое количество символов до точки, затем точка и любое количество символов после".
  3. Переход в PowerShell:

    Если вам более удобно работать с PowerShell, вы можете использовать следующую команду:

    Get-ChildItem -Directory | Where-Object { $_.Name -like "*.*" }

    Эта команда:

    • Get-ChildItem -Directory получает список всех директорий в текущем каталоге.
    • Where-Object { $_.Name -like "*.*" } фильтрует результаты и выводит только те директории, имена которых содержат хотя бы одну точку.

Заключение:

Выбор метода зависит от ваших предпочтений. Команда dir с фильтрацией через find является простым и эффективным способом, в то время как PowerShell предоставляет более гибкие возможности для выполнения фильтрации и работы с объектами.

Оцените материал
Добавить комментарий

Капча загружается...