1

Я пытаюсь выяснить, как проверить в PowerShell, будет ли подстановочный знак в нотации командной строки будет срабатывать для данного пути. Чтобы было ясно, у меня есть что-то вроде этого:

For ($exception in $Exceptions) {
    For ($path in $ListOfAllItems) {
        If (IsPartOfPath -Wildcard $exception -Path $path) {
            -- do something....
        }
    }
}

Проблема у меня заключается в том, как реализовать эту функцию IsPartOfPath . Я пробовал простой $path -imatch $wildcard но результат мне не понравился, поскольку он полностью соответствует синтаксису RegEx. Есть ли в PS причудливый способ сделать это, кроме написания всей проверки по шаблону самостоятельно?

Идея ее решения состояла в том, чтобы получить путь к ресурсу, на который ссылается $path и проверить, относится ли $exception к тому же ресурсу. Однако я понятия не имею, возможно ли это в PowerShell:/

1 ответ1

0

Оператор -like вероятно, то, что вы после. Это не делает никакого сравнения регулярных выражений, и это работает с * и ? именно так, как вы ожидаете. Это без учета регистра.

К сожалению, у него есть пара дополнительных функций: # соответствует числу, а расположение в квадратных скобках, например [abc] соответствует любому из символов в скобках. Кажется, что он имеет ту же семантику, что и фильтр Get-ChildItem и оператор Like VB.NET.

Если это проблематично, вы можете избежать нежелательных подстановочных знаков перед использованием -like:

$path -like ($wildcard.Replace('[', '[[]').Replace('#', '[#]'))

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