Se puede utilizar una combinación de pwd
, Join-Path
y [System.IO.Path]::GetFullPath
para obtener una ruta ampliada completo.
Dado que cd
( Set-Location
) no cambia el directorio de trabajo actual del proceso, simplemente pasar un nombre de archivo relativo a una API .NET que no comprende el contexto de PowerShell puede tener efectos secundarios no deseados, como resolver una ruta basada en el trabajo inicial. directorio (no su ubicación actual).
Lo que haces es primero calificar tu camino:
Join-Path (Join-Path (pwd) fred\frog) '..\frag'
Esto produce (dada mi ubicación actual):
C:\WINDOWS\system32\fred\frog\..\frag
Con una base absoluta, es seguro llamar a la API .NET GetFullPath
:
[System.IO.Path]::GetFullPath((Join-Path (Join-Path (pwd) fred\frog) '..\frag'))
Lo que le brinda la ruta completamente calificada y con lo ..
eliminado:
C:\WINDOWS\system32\fred\frag
Tampoco es complicado, personalmente, desdeño las soluciones que dependen de scripts externos para esto, es un problema simple resuelto con bastante acierto por Join-Path
y pwd
( GetFullPath
es solo para hacerlo bonito). Si solo desea conservar solo la parte relativa , simplemente agregue .Substring((pwd).Path.Trim('\').Length + 1)
y ¡listo!
fred\frag
ACTUALIZAR
Gracias a @Dangph por señalar el C:\
caso de borde.