Вы можете использовать комбинацию pwd
, Join-Path
и [System.IO.Path]::GetFullPath
получить полную расширенный путь.
Поскольку cd
( Set-Location
) не изменяет текущий рабочий каталог процесса, простая передача относительного имени файла в .NET API, который не понимает контекст PowerShell, может иметь непреднамеренные побочные эффекты, такие как разрешение на путь, основанный на исходной рабочей каталог (не ваше текущее местоположение).
Что вы делаете, это сначала определяете свой путь:
Join-Path (Join-Path (pwd) fred\frog) '..\frag'
Это дает (учитывая мое текущее местоположение):
C:\WINDOWS\system32\fred\frog\..\frag
Имея абсолютную базу, можно безопасно вызывать .NET API GetFullPath
:
[System.IO.Path]::GetFullPath((Join-Path (Join-Path (pwd) fred\frog) '..\frag'))
Что дает вам полный путь и с ..
удаленными:
C:\WINDOWS\system32\fred\frag
Это тоже несложно, лично я пренебрегаю решениями, которые зависят от внешних скриптов для этого, это простая проблема, довольно удачно решенная с помощью Join-Path
и pwd
( GetFullPath
просто чтобы сделать это красиво). Если вы хотите сохранить только относительную часть , вы просто добавляете .Substring((pwd).Path.Trim('\').Length + 1)
и вуаля!
fred\frag
ОБНОВИТЬ
Спасибо @Dangph за указание на крайний C:\
случай.