powershell 如何获取路径中特定目录的完整文件路径?

oknwwptz  于 2023-03-23  发布在  Shell
关注(0)|答案(2)|浏览(176)

我有一个路径,比如D:\repos\my-repo\some\script\path.ps1,我想获取到仓库名称的路径:D:\repos\my-repo。完成此任务的最佳方法是什么?以下是我现在的方法:

$fullPath = $MyInvocation.MyCommand.Path # D:\repos\my-repo\some\script\path.ps1
"{0}my-repo" -f [regex]::Split($fullPath, 'my-repo')[0]

这是可行的,但在我看来,它是相当丑陋和低效的。有没有更好的方法来实现这一点?

6rqinv9w

6rqinv9w1#

不要看你目前拥有的东西有什么效率低下,但这里有两种不同的方法可以实现同样的目标。

$path = 'D:\repos\my-repo\some\script\path.ps1'
$path -replace '(?<=my-repo)\\.*'

详细信息:https://regex101.com/r/ZkdlCR/1

$path = 'D:\repos\my-repo\some\script\path.ps1'
$path -replace '(?:\\[^\\]*){3}$'

标签:https://regex101.com/r/6gk4MF/1
如果你正在寻找面向对象的方法,你也可以将FileInfo转换为你的路径,然后获取文件的父目录(.Directory),从那里你可以使用.Parent属性来遍历它。

$path = 'D:\repos\my-repo\some\script\path.ps1'
([System.IO.FileInfo] $path).Directory.Parent.Parent.FullName
tyky79it

tyky79it2#

另一个正则表达式解决方案:

$path = 'D:\repos\my-repo\some\script\path.ps1'
($path -split '(?<=\\my-repo)\\')[0]

*输出:

PS > $path = 'D:\repos\my-repo\some\script\path.ps1'
PS >
PS > ($path -split '(?<=\\my-repo)\\')[0]
D:\repos\my-repo
PS >
PS > $path = 'D:\repos\anotehrLevel\my-repo\some\script\path.ps1'
PS >
PS > ($path -split '(?<=\\my-repo)\\')[0]
D:\repos\anotehrLevel\my-repo

相关问题