Как в PowerShell и Get-ChildItem найти только папки
В этой заметке будет показано, как в PowerShell вывести только папки и подпапки определённого каталога. Мы будем использовать командлет Get-ChildItem, который показывает дочерние элементы выбранного диска или директории.
Как в Get-ChildItem вывести только папки
Чтобы в PowerShell вывести только папки без файлов, используйте командлет Get-ChildItem с опцией -Directory.
К примеру, следующая команда покажет подпапки каталога C:\Users\MiAl\:
Get-ChildItem -Path C:\Users\MiAl\ -Directory
Пример вывода:
Directory: C:\Users\MiAl Mode LastWriteTime Length Name ---- ------------- ------ ---- d-r-- 5/9/2024 7:23 PM Contacts d-r-- 5/19/2024 2:39 PM Desktop d-r-- 5/9/2024 7:23 PM Documents d-r-- 8/18/2024 5:42 PM Downloads d-r-- 5/9/2024 7:23 PM Favorites d-r-- 5/9/2024 7:23 PM Links d-r-- 5/9/2024 7:23 PM Music d-r-- 5/9/2024 7:25 PM OneDrive d-r-- 5/9/2024 7:29 PM Pictures d-r-- 5/9/2024 7:23 PM Saved Games d-r-- 5/9/2024 7:28 PM Searches d-r-- 6/12/2024 1:33 PM Videos
Если вы хотите вывести только имена папок без каких-либо дополнительных сведений, то используйте следующую команду:
Get-ChildItem -Path C:\Users\MiAl\ -Directory -Name
При желании, вы можете вывести только список папок в данной папке и убрать заголовки таблицы:
Get-ChildItem -Path C:\Users\MiAl\ -Directory | Format-Table -Property Name -HideTableHeaders
Рекурсивный вывод содержимого папок
Если вы хотите получить папки в указанном пути, а также все подпапки которые находятся внутри этих каталогов, то используйте опцию -Recurse:
Get-ChildItem -Path C:\Users\MiAl\ -Directory -Recurse
Вывод получается довольно сумбурным (особенно если имеется много вложенных папок). Данная команда может стать основой для более сложной конструкции из командлетов для поиска или обработки всех папок и подпапок определённого места на диске.
Если вам хочется окинуть взглядом всё содержимое определённого каталога, включая все подпапки, то следующая команда сделает вывод более наглядным:
Get-ChildItem -Path C:\Users\MiAl\ -Directory -Recurse | Format-Table -Property FullName
Как найти пустые папки
Чтобы в PowerShell найти пустые папки, то есть папки без файлов, используйте команду вида:
Get-ChildItem -Path Z: -Recurse -Directory | Where-Object {$_.GetFiles().Count -eq 0}
Вышеприведённая команда PowerShell рекурсивно ищет каталог с помощью параметра -Recurse и передаёт его объект другой команде для поиска количества файлов. Второй командлет проверяет количество файлов каталога на равенство 0 и возвращает только пустые папки.
Чтобы получить наглядный список папок с пустым содержимым попробуйте следующую команду:
Get-ChildItem -Path Z: -Recurse -Directory | Where-Object {$_.GetFiles().Count -eq 0} | Format-Table -Property FullName
Вы получите перечень пустых папок с указанием абсолютного пути до них.
Как найти системные папки
Системными считаются папки у которых установлен специальный атрибут (System).
Get-ChildItem -Path C:\ -Directory -Recurse -System
Вышеприведённая команда PowerShell получает только системные папки. Если у вас нет прав администратора, она выдаст сообщение об исключении, так как доступ к пути к папке запрещён.
Если вы привыкли работать с атрибутами файлов и папок, то следующая команда может показаться вам привычнее (две последние команды дадут идентичный результат):
Get-ChildItem -Path C:\ -Directory -Recurse -Attributes System
Вы можете заметить, что для некоторых папок показана ошибка:
Get-ChildItem: Access to the path 'C:\PerfLogs' is denied. Get-ChildItem: Access to the path 'C:\Program Files\Windows Defender Advanced Threat Protection\Classification\Configuration' is denied.
Она связана с недостатком прав — вы можете открыть терминал PowerShell с правами администратора и запустить эту команду ещё раз — ошибок станет заметно меньше, но полностью они не исчезнут. Всё дело в том, что Администратор имеет не самые высокие полномочия. Самые высокие полномочия у System. Можно получить привилегии System с помощью специальных утилит для аудита информационной безопасности Windows, но эта тема точно выходит за рамки данной небольшой заметки — я упоминаю об этом только для того, чтобы вы не удивлялись, что даже у пользователя Администратор может быть недостаточно прав для доступа к определённым папкам.
Как в Get-ChildItem посчитать количество каталогов внутри папки
Чтобы получить количество каталогов внутри родительской папки нам понадобиться использовать Get-ChildItem (чтобы получить список всех папок, которые находятся в месте указанном после опции -Path) в паре с командлетом Measure-Object, который и будет считать количество каталогов.
Get-ChildItem -Path C: -Directory | Measure-Object Get-ChildItem -Path Z: -Directory | Measure-Object
В приведённой выше команде PowerShell она получает все каталоги и проходит через Measure-Object для получения количества каталогов.
Как найти папки с определённым именем. Поиск папок по шаблону имени
С помощью опции -Filter вы можете найти файлы с определённым именем. Вы можете использовать опцию -Filter с подстановочными знаками «*» и «?» и искать папки, чьё имя соответствует шаблону.
К примеру, следующая команда найдёт папку с именем «test»:
Get-ChildItem -Path '/home/mial/' -Directory -Filter 'test'
А эта команда найдут папки, чьё имя содержит строку «test» в любой части имени:
Get-ChildItem -Path '/home/mial/' -Directory -Filter '*test*'
Если вам нужно найти папку с определённым именем расположение которой вам неизвестно, то вы можете использовать следующую конструкцию:
Get-ChildItem -Path '/home/mial/' -Directory -Filter 'test' -Recurse | Format-Table -Property FullName
Эта команда найдёт папки с точным именем «test» и для всех найденных папок выведет только полный путь до данного каталога.
Заключение
Надеюсь, приведённая выше статья поможет вам понять командлет PowerShell Get-ChildItem для получения только папок или свойств, связанных с папками. В рассмотренных примерах ключевой опцией командлета Get-ChildItem является -Directory, которая указывает, что нужно выводить только папки.
Связанные статьи:
- Как в PowerShell найти файлы большого размера (с помощью Get-Childitem) (100%)
- Замена chkdsk в PowerShell для исправления ошибок диска (50%)
- Как узнать размер свободного и занятого пространства диска в PowerShell (50%)
- Как узнать текущий каталог в командной строке Windows. Аналог pwd в PowerShell (50%)
- Аналог cd и chdir в PowerShell. Как поменять текущую рабочую папку в PowerShell (50%)