2

Я хочу найти все папки, которые содержат хотя бы одну заглавную букву и находятся под определенной папкой.

До сих пор я играл с этой силовой оболочкой:

Get-ChildItem -Recurse
    | ?{ $_.PSIsContainer }
    | Where-Object {$_.FullName -match "^.*?refs\\.*[A-Z]+.*$"}
    | Select-Object FullName

Но он терпит неудачу в том, что в нем перечислены ВСЕ папки, которые содержат заглавные буквы в любом месте в своем имени. Я только хочу, чтобы подпапки refs были в списке.

Где моя ошибка? Когда я пробую регулярное выражение в движке тестирования регулярных выражений, оно правильно перечисляет только подпапки refs . Видимо силовой двигатель оболочки работает по-другому?

1 ответ1

3

Это действительно странно. Кажется, что оператор -Match не будет заботиться о регистре, независимо от того, что находится в регулярном выражении (или, может быть, есть другое объяснение).

Тем не менее, изменение -Match на -CMatch (чувствительное к регистру совпадение), похоже, работает для каталога с образцами ma:

Get-ChildItem -Recurse -Directory | Where-Object FullName -CMatch "^.*?refs\\.*[A-Z]+.*$" | select Fullname

Вы также можете использовать ускоритель типа [regex] для большего контроля.

$regex = [regex]"^.*?refs\\.*[A-Z]+.*$"
$match = $regex.Match('C:\Users\user\refs\whatever\test1\test2\test3')

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