Vous pouvez utiliser une combinaison de pwd
, Join-Path
et[System.IO.Path]::GetFullPath
d'obtenir un chemin dilatée complet.
Étant donné que cd
( Set-Location
) ne modifie pas le répertoire de travail actuel du processus, le simple fait de passer un nom de fichier relatif à une API .NET qui ne comprend pas le contexte PowerShell peut avoir des effets secondaires inattendus, tels que la résolution d'un chemin basé sur le travail initial répertoire (pas votre emplacement actuel).
Ce que vous faites, c'est d'abord qualifier votre chemin:
Join-Path (Join-Path (pwd) fred\frog) '..\frag'
Cela donne (étant donné ma position actuelle):
C:\WINDOWS\system32\fred\frog\..\frag
Avec une base absolue, il est sûr d'appeler l'API .NET GetFullPath
:
[System.IO.Path]::GetFullPath((Join-Path (Join-Path (pwd) fred\frog) '..\frag'))
Ce qui vous donne le chemin complet et avec le ..
supprimé:
C:\WINDOWS\system32\fred\frag
Ce n'est pas compliqué non plus, personnellement, je dédaigne les solutions qui dépendent de scripts externes pour cela, c'est un problème simple résolu assez bien par Join-Path
et pwd
( GetFullPath
c'est juste pour le rendre joli). Si vous ne souhaitez conserver que la partie relative , il vous suffit d'ajouter .Substring((pwd).Path.Trim('\').Length + 1)
et le tour est joué!
fred\frag
METTRE À JOUR
Merci à @Dangph d'avoir souligné le C:\
cas de bord.