使用PowerShell从拆分路径获取文件的最低级别目录名称

Tra*_*vis 35 powershell

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

例:

c:\dir1\dir2\dir3\file.txt
Run Code Online (Sandbox Code Playgroud)

我需要将dir3放入变量中.

我一直在尝试分裂路径,但它给了我整条路径.

Kei*_*ill 55

这需要两次Split-PathAFAICT 调用:

PS> Split-Path (Split-Path c:\dir1\dir2\dir3\file.txt -Parent) -Leaf
dir3
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!我的相似!对我来说,我使用<(Split-Path"\\ usa0xxxnas.na.xxx.net\xxxbackups\T_SQL_Web_Prod \" - leaf)>它给了我T_SQL_Web_Prod目录. (2认同)
  • 或者等效地,避免那些讨厌的括号: `Split-Path c:\dir1\dir2\dir3\file.txt -Parent | 分割路径-叶子` (2认同)

Mar*_*cus 11

这个问题特别要求分裂路径,但其他一些方法是:

如果该文件存在,我发现它更好:

(Get-Item c:\dir1\dir2\dir3\file.txt).Directory.Name
Run Code Online (Sandbox Code Playgroud)

如果该文件不存在,则无效.在这种情况下,另一种方法是使用.NET API,例如:

$path = [System.IO.Path];
$path::GetFileName($path::GetDirectoryName("c:\dir1\dir2\dir3\file.txt"))
Run Code Online (Sandbox Code Playgroud)


man*_*lds 7

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

"c:\dir1\dir2\dir3\file.txt".split("\")[-2]
Run Code Online (Sandbox Code Playgroud)


Sha*_*evy 7

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

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

如果该文件存在于磁盘上:

PS> (dir c:\dir1\dir2\dir3\file.txt).directory.name
Run Code Online (Sandbox Code Playgroud)