#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