我想查找某個資料夾下方至少包含一個大寫字母的所有資料夾。
到目前為止我已經嘗試過這個電源外殼:
Get-ChildItem -Recurse
| ?{ $_.PSIsContainer }
| Where-Object {$_.FullName -match "^.*?refs\\.*[A-Z]+.*$"}
| Select-Object FullName
但它失敗了,因為它列出了名稱中包含大寫字母的所有資料夾。我只想refs
列出 的子資料夾。
我的錯誤在哪裡?當我在正則表達式測試引擎中嘗試正則表達式時,它正確地僅列出refs
.顯然動力殼引擎的工作方式有所不同?
答案1
確實很奇怪。看來-Match
操作員不會關心大小寫,無論正規表示式是什麼(或可能有不同的解釋)。
儘管如此,更改-Match
為-CMatch
(區分大小寫的匹配)似乎適用於 ma 範例目錄:
Get-ChildItem -Recurse -Directory | Where-Object FullName -CMatch "^.*?refs\\.*[A-Z]+.*$" | select Fullname
您還可以使用[regex]
類型加速器進行更好的控制。
$regex = [regex]"^.*?refs\\.*[A-Z]+.*$"
$match = $regex.Match('C:\Users\user\refs\whatever\test1\test2\test3')