3

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

У меня есть много каталогов, как это:

abc_123
abc_345
abc_567
abc_890
abc_111
abc_569

В каждом каталоге есть определенный файл с одинаковым путем к каждому файлу в каждом каталоге:

abc_123:\AAA\SDK\Settings\foo.settings.xml
abc_345:\AAA\SDK\Settings\foo.settings.xml
abc_567:\AAA\SDK\Settings\foo.settings.xml

И так далее.

В файле foo.settings.xml я хочу найти «BAR». а также на одну строку ниже:

  <name="BAR.ABB"
            default="1"

Проблема, которая у меня возникла, находится в каталоге, в котором есть abc_123, abc_345, abc_567 и т.д., Есть другие каталоги, которые также содержат BAR. *. Мне плевать на эти результаты.

Я пытаюсь что-то подобное, но это не работает.

Get-ChildItem -Recurse *.* | Select-String -Pattern "BAR.*" foo.settings.xml | Select-Object -Unique Path

Где в моей команде я могу указать, что я хочу искать каталоги, начинающиеся с abc_ и по указанному пути?

--- редактировать ---

Путь всегда начинается с abc_ *, и foo.settings.xml всегда имеет этот путь:abc_*:\AAA\SDK\Settings\foo.settings.xml

Я попробовал это:Get-ChildItem -Recurse | Where-Object {"abc_*"} | Select-String –Pattern "BAR.*" , Но это, похоже, дает те же результаты сверху.

1 ответ1

2

В вашей строке Get-ChildItem -Recurse *.* Вы указываете, что вам нужны все файлы с любым расширением, поскольку *.* Привязывается к параметру -Filter .

Чтобы получить все файлы, начинающиеся с пути abc_ * и всегда с одинаковым относительным путем, вы можете сделать что-то вроде этого: Get-ChildItem -Recurse | Where-Object {$_.FullName -like 'abc_*:\AAA\SDK\Settings\foo.settings.xml'} | Select-String ...

Однако, учитывая, что каждый файл foo.settings.xml находится в одном и том же относительном каталоге, это кажется относительно неэффективным, учитывая большое количество подкаталогов в каждом abc_* . Лучшее решение в этом случае было бы что-то вроде:

(где $ Path - это корневой путь к папке со всеми каталогами abc_ *)

Get-ChildItem $Path -Filter abc_* | Foreach-Object {Select-String -Path "$($_.FullName)\AAA\SDK\Settings\foo.settings.xml" -Pattern "BAR.*"}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .