获取给定文件的第二个父目录

时间:2019-05-29 14:29:59

标签: regex powershell substring

我有一个脚本,可以查找包含某些字符串的文件。

假设我找到的文件是:

C:\temp\drivers\etc\file.INF

我想获取该文件的第二个父文件夹。

例如,如果是

C:\temp\drivers\etc\file.INF

我想要这样的路径:

C:\temp\drivers

在这种情况下,什么对您最有意义?

我可以使用它:

$test = "C:\temp\drivers\etc\file.INF" 
$first_parent = Split-path $test -Parent
$second_parent= $first_parent.Substring(0,$first_parent.LastIndexOf('\'))
$second_parent

输出:

C:\temp\drivers

但这是最佳选择吗?

2 个答案:

答案 0 :(得分:1)

如果项目是文件(不仅仅是字符串),则可以从fileinfoGet-Item获得的Get-ChildItem对象派生祖父母目录。这样...

$FileName_String = 'C:\temp\drivers\etc\file.INF'
# fake reading in the fileinfo object
#    in real life, use Get-Item or Get-ChildItem
$FileName_FileInfoObject = [System.IO.FileInfo]$FileName_String

$2ndParentDir = $FileName_FileInfoObject.Directory.Parent

$FileName_String
$FileName_FileInfoObject.FullName
$2ndParentDir.FullName

输出...

C:\temp\drivers\etc\file.INF
C:\temp\drivers\etc\file.INF
C:\temp\drivers

如果只是字符串,则需要使用Split-Path两次。 [咧嘴]

答案 1 :(得分:0)

两次使用分割路径即可完成此操作。最简单的方法是管道:

$test = "C:\temp\drivers\etc\file.INF"
Split-path $test | split-path 

输出:

C:\temp\drivers