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 refs
que 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 -Match
operador 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 -Match
a -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')