Puede usar una combinación de pwd
, Join-Path
y [System.IO.Path]::GetFullPath
para obtener una ruta expandida totalmente calificada.
Desde cd
(Set-Location
) no cambia el actual proceso de directorio de trabajo, simplemente pasando un nombre de archivo en relación con un API .NET que no entiende el contexto PowerShell, puede tener efectos secundarios no deseados, tales como la resolución de una ruta basada en el directorio de trabajo inicial (no su ubicación actual).
Lo que se hace es primera vez que cumple con los requisitos de su trayectoria:
Join-Path (Join-Path (pwd) fred\frog) '..\frag'
Esta rendimientos (dado mi ubicación actual):
C:\WINDOWS\system32\fred\frog\..\frag
Con una base absoluta, es seguro que llamar al.API NET GetFullPath
:
[System.IO.Path]::GetFullPath((Join-Path (Join-Path (pwd) fred\frog) '..\frag'))
que le da la ruta completa y con la ..
eliminado:
C:\WINDOWS\system32\fred\frag
No es complicado, ya sea, en lo personal, Desdeño las soluciones que dependen de scripts externos de este, es un problema simple resuelto bastante bien por Join-Path
y pwd
(GetFullPath
es solo para hacerlo bonito). Si solo desea mantener solo la parte relativa, solo agregue .Substring((pwd).Path.Trim('\').Length + 1)
y ¡listo!
fred\frag
ACTUALIZACIÓN
Gracias a @Dangph por señalar el caso C:\
borde.
¿Es frag una subcarpeta de rana? Si no, combinar el camino te haría fred \ frog \ frag. Si es así, esa es una pregunta muy diferente. – EBGreen