Vous pouvez utiliser une combinaison d' pwd
, Join-Path
et [System.IO.Path]::GetFullPath
pour obtenir un complet chemin étendu.
Depuis cd
(Set-Location
) ne modifie pas le processus répertoire de travail en cours, simplement en passant un parent nom de fichier à un .NET API qui n'a pas de comprendre PowerShell contexte, peut avoir des effets secondaires indésirables, tels que la résolution d'un chemin d'accès basé sur le répertoire de travail actif (pas de votre emplacement actuel).
Ce que vous faites, est d'abord qualifier votre chemin:
Join-Path (Join-Path (pwd) fred\frog) '..\frag'
Cette rendements (compte tenu de ma position actuelle):
C:\WINDOWS\system32\fred\frog\..\frag
Avec un absolu de la base, il est possible d'appeler le .NET API GetFullPath
:
[System.IO.Path]::GetFullPath((Join-Path (Join-Path (pwd) fred\frog) '..\frag'))
Qui vous donne le chemin d'accès complet et avec l' ..
retiré:
C:\WINDOWS\system32\fred\frag
C'est pas compliqué non plus, personnellement, je dédaigne les solutions qui dépendent de scripts externes pour cela, c'est simple problème résolu plutôt bien par Join-Path
et pwd
(GetFullPath
, c'est juste pour faire joli). Si vous ne voulez garder seulement de la part relative, il suffit d'ajouter .Substring((pwd).Path.Trim('\').Length + 1)
et le tour est joué!
fred\frag
Mise à JOUR
Grâce à @Dangph pour souligner l' C:\
de cas de bord.