È possibile utilizzare una combinazione di pwd
, Join-Path
e [System.IO.Path]::GetFullPath
per ottenere un percorso espanso completo.
Poiché cd
( Set-Location
) non modifica la directory di lavoro corrente del processo, il semplice passaggio di un nome file relativo a un'API .NET che non comprende il contesto di PowerShell, può avere effetti collaterali indesiderati, come la risoluzione di un percorso basato sul lavoro iniziale directory (non la posizione corrente).
Quello che fai è prima qualificare il tuo percorso:
Join-Path (Join-Path (pwd) fred\frog) '..\frag'
Questo produce (data la mia posizione attuale):
C:\WINDOWS\system32\fred\frog\..\frag
Con una base assoluta, è sicuro chiamare l'API .NET GetFullPath
:
[System.IO.Path]::GetFullPath((Join-Path (Join-Path (pwd) fred\frog) '..\frag'))
Che ti dà il percorso completo e con il ..
rimosso:
C:\WINDOWS\system32\fred\frag
Non è nemmeno complicato, personalmente, disdegno le soluzioni che dipendono da script esterni per questo, è un problema semplice risolto piuttosto opportunamente da Join-Path
e pwd
( GetFullPath
è solo per renderlo carino). Se vuoi solo mantenere solo la parte relativa , aggiungi .Substring((pwd).Path.Trim('\').Length + 1)
e voilà!
fred\frag
AGGIORNARE
Grazie a @Dangph per aver sottolineato il C:\
caso limite.