Как найти конкретного родителя / ребенка с помощью Get-ChildItem? - PullRequest
0 голосов
/ 23 мая 2019

Я могу рекурсивно искать каталог, используя Get-ChildItem -Recurse, чтобы найти конкретный каталог, но меня интересует только тот случай, когда каталог является дочерним по отношению к другому определенному каталогу.Родитель / ребенок может существовать на любой произвольной глубине в дереве каталогов.Например:

C: \ lev1 \ lev2 \ lev3 \ lev4 \ parentDir \ childDirToFind \ lev7 ...

Следующий код возвращает все вхождения childDirToFind:

Get-ChildItem -Path C:\\*\\*\ChildDirToFind -Recurse

Я пытался включить parentDir в опцию -Path и не получил результатов;Например:

Get-ChildItem -Path C:\\*\\*\parentDir\childDirToFind -Recurse

Я также пытался использовать опцию -Filter безрезультатно.Возможно, Get-ChildItem не лучший подход?В идеале я бы хотел, чтобы Get-ChildItem возвращался сразу после нахождения каталога и не продолжал поиск по всему дереву.

Ответы [ 2 ]

0 голосов
/ 24 мая 2019

Спасибо Rich Moss и LotPings за то, что направили меня в правильном направлении. Оба решения дают правильные результаты, хотя передача вывода в «select -first 1» действительно дает дополнительное преимущество - останавливает поиск в каталоге, как только найден результат. Я не уверен, почему, но использование -filter и сравнение $ .Parent.Name вдвое быстрее, чем сравнение $ .FullName (как проверено с помощью Measure-Command). Я в конечном итоге пошел с этим:

cgi C: \ -dir -rec -ea SilentlyContinue -filter childDirectory | ? {$ _. Parent.Name -eq 'parentDir'} | выберите -first 1

0 голосов
/ 24 мая 2019

Вот пример, где parent drivers и child etc

Get-ChildItem C:\Windows -Recurse -Directory -ErrorAction SilentlyContinue | ? { $_.FullName -like '*\drivers\etc' }

Я добавил параметр -ErrorAction, чтобы скрыть все недоступные ошибки папки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...