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 refs
aufgelistet 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 -Match
Operator 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 -Match
auf -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')