Найти все папки, содержащие заглавные буквы, в определенной папке

Найти все папки, содержащие заглавные буквы, в определенной папке

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

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

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')

Связанный контент