Encuentre todas las carpetas que contienen letras mayúsculas debajo de una carpeta determinada

Encuentre todas las carpetas que contienen letras mayúsculas debajo de una carpeta determinada

Quiero encontrar todas las carpetas que contengan al menos una letra mayúscula y que estén debajo de una determinada carpeta.

Jugué con este power shell hasta ahora:

Get-ChildItem -Recurse
    | ?{ $_.PSIsContainer }
    | Where-Object {$_.FullName -match "^.*?refs\\.*[A-Z]+.*$"}
    | Select-Object FullName

Pero falla porque enumera TODAS las carpetas que contienen letras mayúsculas en CUALQUIER LUGAR de su nombre. Solo quiero refsque se enumeren las subcarpetas de.

¿Dónde está mi error? Cuando pruebo la expresión regular en un motor de prueba de expresiones regulares, solo enumera correctamente las subcarpetas de refs. ¿Aparentemente el motor Power Shell funciona de manera diferente?

Respuesta1

Es realmente extraño. Parece que al -Matchoperador no le importará el caso, independientemente de lo que esté en la expresión regular (o tal vez haya una explicación diferente).

Sin embargo, cambiar -Matcha -CMatch(coincidencia que distingue entre mayúsculas y minúsculas) parece funcionar para un directorio de muestra:

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

También puedes utilizar el [regex]tipo acelerador para un mayor control.

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

información relacionada