Anda dapat menggunakan kombinasi dari pwd, Join-Pathdan [System.IO.Path]::GetFullPathuntuk mendapatkan jalur yang diperluas sepenuhnya.
Karena cd( Set-Location) tidak mengubah proses direktori kerja saat ini, cukup meneruskan nama file relatif ke .NET API yang tidak memahami konteks PowerShell, dapat memiliki efek samping yang tidak diinginkan, seperti menyelesaikan ke jalur berdasarkan pekerjaan awal direktori (bukan lokasi Anda saat ini).
Apa yang Anda lakukan adalah pertama-tama Anda memenuhi syarat untuk jalur Anda:
Join-Path (Join-Path (pwd) fred\frog) '..\frag'
Hasil ini (mengingat lokasi saya saat ini):
C:\WINDOWS\system32\fred\frog\..\frag
Dengan basis absolut, aman untuk memanggil .NET API GetFullPath:
[System.IO.Path]::GetFullPath((Join-Path (Join-Path (pwd) fred\frog) '..\frag'))
Yang memberi Anda jalur yang sepenuhnya memenuhi syarat dan dengan yang ..dihapus:
C:\WINDOWS\system32\fred\frag
Ini juga tidak rumit, secara pribadi, saya meremehkan solusi yang bergantung pada skrip eksternal untuk ini, ini masalah sederhana diselesaikan dengan tepat oleh Join-Pathdan pwd( GetFullPathhanya untuk membuatnya cantik). Jika Anda hanya ingin menyimpan bagian yang relatif saja , Anda tinggal menambahkan .Substring((pwd).Path.Trim('\').Length + 1)dan voila!
fred\frag
MEMPERBARUI
Terima kasih kepada @Dangph karena telah menunjukkan C:\case edge.