我想查找包含至少一个大写字母且位于某个文件夹下的所有文件夹。
到目前为止,我已经尝试过这个电源外壳:
Get-ChildItem -Recurse
| ?{ $_.PSIsContainer }
| Where-Object {$_.FullName -match "^.*?refs\\.*[A-Z]+.*$"}
| Select-Object FullName
但它失败了,因为它列出了名称中包含大写字母的所有文件夹。我只想refs
列出子文件夹。
我的错误在哪里?当我在正则表达式测试引擎中尝试正则表达式时,它正确地仅列出了 的子文件夹refs
。显然,Power Shell 引擎的工作方式不同?
答案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')