Получить 2-й родительский каталог данного файла - PullRequest
0 голосов
/ 29 мая 2019

У меня есть скрипт, который находит файлы, содержащие определенные строки.

Допустим, мой найденный файл:

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 ]

1 голос
/ 29 мая 2019

если ваш элемент является файлом, а не просто строкой, вы можете получить dir деда из объекта fileinfo, который вы получаете из Get-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

output ...

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

если это просто строка, то вам нужно использовать Split-Path дважды.[ ухмылка ]

0 голосов
/ 29 мая 2019

Использование split-path дважды делает это. Проще всего это обвязать:

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

Выход:

C:\temp\drivers
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...