Encontre todas as pastas contendo letras maiúsculas abaixo de uma determinada pasta

Encontre todas as pastas contendo letras maiúsculas abaixo de uma determinada pasta

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 refssejam 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 -Matchoperador não se importará com case, independentemente do que esteja na regex (ou talvez haja uma explicação diferente).

No entanto, mudar -Matchpara -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')

informação relacionada