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

2

Eu 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 no nome delas. Eu só quero que as subpastas de refs sejam listadas.

Onde está o meu erro? Quando eu tento o regex em um mecanismo de teste de regex, ele só lista corretamente as subpastas de refs . Aparentemente, o motor da shell de energia funciona de maneira diferente?

    
por Florian Peschka 30.08.2017 / 10:20

1 resposta

3

É estranho mesmo. Parece que o operador -Match não se importará com o caso, independentemente do que estiver no regex (ou talvez haja uma explicação diferente).

No entanto, a alteração de -Match para -CMatch (correspondência de distinção entre maiúsculas e minúsculas) parece estar funcionando para o diretório ma sample:

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

Você também pode usar o acelerador do tipo [regex] para obter maior controle.

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