Получить каталоги, начинающиеся с P в PowerShell

#powershell

#powershell

Вопрос:

Я хочу получить все каталоги, начинающиеся с «P».

В cmd вы бы сделали это:

 dir p*
  

Как вы это делаете в Windows PowerShell?

Я пробовал это, но это ничего не возвращает:

 Get-ChildItem -Path C:thePath* -dir -Include p*
  

Удаление -Include p* вернет все папки, как ожидалось.

Ответ №1:

Либо включить шаблон непосредственно в -Path аргумент:

 Get-ChildItem -Path C:thePathp* -Directory
  

… или используйте -Filter аргумент, который является более быстрой альтернативой, потому что он фильтрует в источнике:

 Get-ChildItem -LiteralPath C:thePath -Filter p* -Directory
  

Что касается того, что вы пробовали:

Общеизвестно, что параметры -Include и -Exclude противоречат здравому смыслу, поскольку они работают только с самим путем ввода или шаблоном, а не с дочерними элементами данного пути ввода, за исключением случаев, когда -Recurse также указано.

В вашем случае, учитывая, что ваш -Path аргумент заканчивается на * , -Include фильтр должен работать, но необъяснимым образом не работает из-за дополнительного присутствия -Directory переключателя — это следует считать ошибкой.
По-видимому, с Get-ChildItem — в отличие от Get-Item -Include всегда включает только файлы, а не каталоги — см. Этот выпуск GitHub.

Вы могли заставить свою команду работать, (а) переключившись с Get-ChildItem на Get-Item и (б) отфильтровав не каталоги после факта, но это менее эффективно, чем приведенные выше альтернативы:

 Get-Item C:thePath* -Include p* | Where-Object PSIsContainer