Я хочу найти все папки, содержащие хотя бы одну заглавную букву и находящиеся в определенной папке.
Я пока поигрался с этой оболочкой:
Get-ChildItem -Recurse
| ?{ $_.PSIsContainer }
| Where-Object {$_.FullName -match "^.*?refs\\.*[A-Z]+.*$"}
| Select-Object FullName
Но это не так, потому что он перечисляет ВСЕ папки, которые содержат заглавные буквы ВЕЗДЕ в своем имени. Я хочу, чтобы refs
были перечислены только подпапки.
Где моя ошибка? Когда я пробую регулярное выражение в движке тестирования регулярных выражений, он правильно перечисляет только подпапки refs
. Видимо, движок power shell работает по-другому?
решение1
Это действительно странно. Похоже, -Match
оператор не будет заботиться о регистре, независимо от того, что находится в регулярном выражении (или, может быть, есть другое объяснение).
Тем не менее, изменение -Match
на -CMatch
(соответствие с учетом регистра), похоже, работает для каталога-образца:
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')