获取路径根(本地,映射网络驱动器或UNC)

时间:2016-01-15 14:18:56

标签: powershell path

分割路径很容易只使用-leaf获取文件名,或者只使用-parent获取完整父路径,或者只使用带有-qualifier的根,但前提是路径是本地路径。但是,有一种简单的方法可以获得路径的根,无论是本地驱动器号,映射驱动器号还是UNC?基本上是人们对 Split-Path $ path -root 的期望。

为了提供一些上下文,我正在记录信息,我想提供父目标和目标,因此C:\ Windows \ Fonts \ arial.ttf的字体\ arial.ttf 。但是,如果父级是根的第一个子级,则显示整个路径,因此我不希望Windows \ Fonts用于C:\ Windows \ Fonts。我有这样做的逻辑,我只需要获取root,这样我就可以确定父节点的父节点是否为root。然而,取决于适用的条件,获得root似乎是很多工作。毫无疑问,有一种regEx方法可行,但我想知道是否有一种原生的PowerShell或.NET方法可以避免RegEx的陷阱?

1 个答案:

答案 0 :(得分:2)

您可以使用的最简单的事情是

[System.IO.path]::GetPathRoot($path)

适用于UNC路径,网络驱动器和本地驱动器。但是所有提供商都会工作。例如,注册表不起作用。

PS M:\> [System.IO.path]::GetPathRoot("C:\temp")
C:\

PS M:\> [System.IO.path]::GetPathRoot("hklm:\temp")


PS M:\> [System.IO.path]::GetPathRoot("\\s5000\Software\Windows\win.ini")
\\s5000\Software

PS M:\> [System.IO.path]::GetPathRoot("M:\DRAFT.docx")
M:\