Фильтр Get-ChildItem по массиву - PullRequest
5 голосов
/ 10 декабря 2011

Я только что начал использовать PowerShell сегодня, и у меня есть файлы списка намерений по нескольким шаблонам в массиве, например:

$matchPattern = (
                  "SomeCompany.SaaS.Core.Mvc*",
                  "SomeCompany.SaaS.Core.UI.Framework*"
                );

Я хочу перечислить файлы в $sourceDir, где совпадает любой элемент в приведенном выше массиве.

Я могу сделать это, и это работает:

foreach ($item in $matchPattern)
{
    Get-ChildItem $sourceDir | Where-Object {$_.Name -like $item}
}

Только для учебы, могу ли я сделать это в трубе?

Что-то похожее на это:

Get-ChildItem $sourceDir | Where-Object { $matchPattern -contains $_.Name  }

Ответы [ 2 ]

7 голосов
/ 10 декабря 2011

Вы можете просто сделать:

gci "$someDir\*" -include $matchPattern
0 голосов
/ 10 декабря 2011

Примерно так должно работать.

Предполагается, что существует массив $ a с несколькими строками в нем:

gci $someDir | %{$a -eq $_.name}

Всякий раз, когда имя каталога, найденное gci, совпадает со значением в$ a массив, он будет отображать это значение.Поэтому, если бы $ someDir = C: \ и «windows» был элементом в $ a, выходные данные были бы просто «windows», если бы это было единственное совпадение.

Редактировать: Моя ошибка, я вас не понялхотел * в качестве подстановочного знака, а не литерала, это соответствует только литералам.Решено ниже.

Для сопоставления с образцом вы можете использовать массивы регулярных выражений.Определите один из них так:

[regex]$patt = “^(Win.*|.*Files)$”

Теперь вы можете сравнивать все совпадения, как указано выше

gci $someDir | ?{$_.name -match $patt}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...