如何在PowerShell的正则表达式Pattern中正确使用$_变量
问题根因
- PowerShell 中单引号包裹的字符串不会进行变量扩展,你写在
'$_\/Directory\/Cars\/Sign.jpg'里的$_会被识别为纯文本,而非外层ForEach-Object遍历的当前行变量,导致匹配规则和预期完全不符。
正确实现方式
将Pattern改为双引号包裹即可让$_变量被正常解析,同时建议对变量内容做正则转义,避免变量自带的特殊字符影响匹配结果:
Get-Content ..\myfile.txt | ForEach-Object { # 双引号支持变量扩展,[regex]::Escape用于转义变量中的正则特殊字符 $counter=(gc *.log | Select-String -Pattern "$([regex]::Escape($_))\/Directory\/Cars\/Sign.jpg") # 如果需要直接获取匹配数量,可追加.Count属性:$counter.Count }
- 如果你确认
$_读取的内容里没有.、*、?、()这类正则特殊字符,也可以简化为"$_\/Directory\/Cars\/Sign.jpg"。
内容的提问来源于stack exchange,提问作者zoit
相关产品推荐
相关产品推荐

