PowerShell 5.1下如何快速切换到当前路径中的_framework目录
最简兼容实现方案(PowerShell 5.1 可用,无需显式拆分遍历)
方案1:正则替换实现(一行代码,自带不存在时兼容)
Set-Location ($PWD.Path -replace '(?<=(?:^|\\)_framework).*$', '')
逻辑说明:
- 直接用内置自动变量
$PWD获取当前工作路径,无需额外调用Get-Location - 正则
(?<=(?:^|\\)_framework).*$使用正向后置断言,匹配路径中_framework之后的所有内容,替换为空后自动得到截止到_framework的完整路径 - 如果当前路径不包含
_framework目录,正则不会命中任何内容,路径不会发生修改,Set-Location执行后无变化,自动兼容不存在的场景,无需额外判断
方案2:-split拆分次数参数实现(逻辑更直观)
如果更偏好可读性更强的写法,可以用-split的拆分次数参数,仅拆分一次即可拿到结果:
if ($PWD.Path -match '\\_framework\\?') { Set-Location (($PWD.Path -split '\\_framework', 2)[0] + '\_framework') }
逻辑说明:
-split的第二个参数指定拆分次数为2,遇到第一个_framework就停止拆分,直接拿到_framework之前的路径片段,拼接后得到目标路径- 额外增加的判断逻辑避免路径不存在
_framework时生成无效路径
内容的提问来源于stack exchange,提问作者SimonS
相关产品推荐
相关产品推荐

