47

我只需要获取文件路径名的最后一部分。

例子:

c:\dir1\dir2\dir3\file.txt

我需要dir3进入一个变量。

我一直在尝试Split-Path,但它给了我整条道路。

4

5 回答 5

71

这需要两次调用Split-PathAFAICT:

PS> Split-Path (Split-Path c:\dir1\dir2\dir3\file.txt -Parent) -Leaf
dir3
于 2012-04-25T14:58:43.867 回答
13

这个问题似乎专门要求拆分路径,但其他一些方法是:

如果文件存在,我发现这样做会更好:

(Get-Item c:\dir1\dir2\dir3\file.txt).Directory.Name

如果文件不存在,这将不起作用。在这种情况下,另一种方法是使用 .NET API,例如:

$path = [System.IO.Path];
$path::GetFileName($path::GetDirectoryName("c:\dir1\dir2\dir3\file.txt"))
于 2013-06-27T08:16:39.017 回答
5

如果您想保持简单并且路径将采用正常形式,您可以使用String.Split()

"c:\dir1\dir2\dir3\file.txt".split("\")[-2]
于 2012-04-25T15:56:15.280 回答
4

使用 System.Uri 的另一个选项:

PS> ([uri]"c:\dir1\dir2\dir3\file.txt").segments[-2].trim('/')
dir3

如果文件存在于磁盘上:

PS> (dir c:\dir1\dir2\dir3\file.txt).directory.name
于 2012-04-25T16:34:02.177 回答
3

一般来说,如果你想要你所在目录的名称,我使用了这个(感谢 Shay Levi 的最初想法):

PS> (dir).directory.name[0]

于 2016-12-30T07:53:16.870 回答