Finde alle Ordner die Großbuchstaben unterhalb eines bestimmten Ordners enthalten

Finde alle Ordner die Großbuchstaben unterhalb eines bestimmten Ordners enthalten

Ich möchte alle Ordner finden, die mindestens einen Großbuchstaben enthalten und sich unter einem bestimmten Ordner befinden.

Ich habe bisher mit dieser Power Shell herumgespielt:

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

Aber es schlägt fehl, da es ALLE Ordner auflistet, die IRGENDWO Großbuchstaben im Namen enthalten. Ich möchte nur, dass Unterordner refsaufgelistet werden.

Wo ist mein Fehler? Wenn ich den regulären Ausdruck in einer Regex-Test-Engine ausprobiere, werden korrekterweise nur Unterordner von aufgelistet refs. Offenbar funktioniert die Power Shell-Engine anders?

Antwort1

Es ist wirklich seltsam. Es scheint, dass der -MatchOperator die Groß- und Kleinschreibung nicht beachtet, unabhängig davon, was im regulären Ausdruck steht (oder vielleicht gibt es eine andere Erklärung).

Trotzdem scheint die Änderung -Matchauf -CMatch(Case-Sensitive Match) für mein Beispielverzeichnis zu funktionieren:

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

[regex]Für eine bessere Kontrolle können Sie auch den Typbeschleuniger verwenden .

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

verwandte Informationen