Ответ 1
Это принимает две вызовы Split-Path
AFAICT:
PS> Split-Path (Split-Path c:\dir1\dir2\dir3\file.txt -Parent) -Leaf
dir3
Мне нужно получить только последнюю часть пути к файлу.
Пример:
c:\dir1\dir2\dir3\file.txt
Мне нужно поместить dir3
в переменную.
Я пытался с Split-Path
, но он дает мне весь путь.
Это принимает две вызовы Split-Path
AFAICT:
PS> Split-Path (Split-Path c:\dir1\dir2\dir3\file.txt -Parent) -Leaf
dir3
Этот вопрос задает вопрос о сплит-пути, но некоторые другие способы:
Если файл существует, я считаю, что это гораздо приятнее:
(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"))
Другой вариант с использованием System.Uri:
PS> ([uri]"c:\dir1\dir2\dir3\file.txt").segments[-2].trim('/')
dir3
И если файл существует на диске:
PS> (dir c:\dir1\dir2\dir3\file.txt).directory.name
Если вы хотите сохранить его простым и путь будет в нормальной форме, вы можете использовать String.Split()
:
"c:\dir1\dir2\dir3\file.txt".split("\")[-2]
В общем, если вы хотите, чтобы имя каталога, в котором вы находитесь, я использовал это (спасибо Shay Levi за оригинальную идею):
PS > (dir).directory.name [0]