Подтвердить что ты не робот

Получение имени каталога самого низкого уровня для файла из разделенного пути с помощью PowerShell

Мне нужно получить только последнюю часть пути к файлу.

Пример:

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

Мне нужно поместить dir3 в переменную.

Я пытался с Split-Path, но он дает мне весь путь.

4b9b3361

Ответ 1

Это принимает две вызовы Split-Path AFAICT:

PS> Split-Path (Split-Path c:\dir1\dir2\dir3\file.txt -Parent) -Leaf
dir3

Ответ 2

Этот вопрос задает вопрос о сплит-пути, но некоторые другие способы:

Если файл существует, я считаю, что это гораздо приятнее:

(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"))

Ответ 3

Другой вариант с использованием System.Uri:

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

И если файл существует на диске:

PS> (dir c:\dir1\dir2\dir3\file.txt).directory.name

Ответ 4

Если вы хотите сохранить его простым и путь будет в нормальной форме, вы можете использовать String.Split():

"c:\dir1\dir2\dir3\file.txt".split("\")[-2]

Ответ 5

В общем, если вы хотите, чтобы имя каталога, в котором вы находитесь, я использовал это (спасибо Shay Levi за оригинальную идею):

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