Quero encontrar todas as pastas que contenham pelo menos uma letra maiúscula e que estejam abaixo de uma determinada pasta.
Eu brinquei com este power shell até agora:
Get-ChildItem -Recurse
| ?{ $_.PSIsContainer }
| Where-Object {$_.FullName -match "^.*?refs\\.*[A-Z]+.*$"}
| Select-Object FullName
Mas falha porque lista TODAS as pastas que contêm letras maiúsculas EM QUALQUER LUGAR em seus nomes. Quero apenas que as subpastas refs
sejam listadas.
Onde está meu erro? Quando tento o regex em um mecanismo de teste de regex, ele lista corretamente apenas subpastas de refs
. Aparentemente, o motor power shell funciona de maneira diferente?
Responder1
É realmente estranho. Parece que o -Match
operador não se importará com case, independentemente do que esteja na regex (ou talvez haja uma explicação diferente).
No entanto, mudar -Match
para -CMatch
(correspondência com distinção entre maiúsculas e minúsculas) parece estar funcionando para um diretório de amostra:
Get-ChildItem -Recurse -Directory | Where-Object FullName -CMatch "^.*?refs\\.*[A-Z]+.*$" | select Fullname
Você também pode usar o [regex]
acelerador de tipo para maior controle.
$regex = [regex]"^.*?refs\\.*[A-Z]+.*$"
$match = $regex.Match('C:\Users\user\refs\whatever\test1\test2\test3')