คุณสามารถใช้การรวมกันของpwd, Join-Pathและ[System.IO.Path]::GetFullPathจะได้รับการขยายเส้นทางที่มีคุณสมบัติครบถ้วน
เนื่องจากcd( Set-Location) ไม่ได้เปลี่ยนไดเร็กทอรีการทำงานปัจจุบันของกระบวนการเพียงแค่ส่งชื่อไฟล์สัมพัทธ์ไปยัง. NET API ที่ไม่เข้าใจบริบทของ PowerShell อาจมีผลข้างเคียงที่ไม่ได้ตั้งใจเช่นการแก้ไขไปยังเส้นทางตามการทำงานครั้งแรก ไดเรกทอรี (ไม่ใช่ตำแหน่งปัจจุบันของคุณ)
สิ่งที่คุณทำคือคุณต้องมีคุณสมบัติตามเส้นทางของคุณก่อน:
Join-Path (Join-Path (pwd) fred\frog) '..\frag'
สิ่งนี้ให้ผล (ระบุตำแหน่งปัจจุบันของฉัน):
C:\WINDOWS\system32\fred\frog\..\frag
ด้วยฐานที่สมบูรณ์จึงปลอดภัยที่จะเรียก. NET API GetFullPath:
[System.IO.Path]::GetFullPath((Join-Path (Join-Path (pwd) fred\frog) '..\frag'))
ซึ่งให้เส้นทางที่มีคุณสมบัติครบถ้วนและเมื่อ..นำออก:
C:\WINDOWS\system32\fred\frag
มันไม่ซับซ้อนโดยส่วนตัวฉันดูถูกวิธีแก้ปัญหาที่ขึ้นอยู่กับสคริปต์ภายนอกสำหรับสิ่งนี้มันเป็นปัญหาง่ายๆที่แก้ไขได้ค่อนข้างเหมาะสมโดยJoin-Pathและpwd( GetFullPathเป็นเพียงการทำให้มันสวย) หากคุณต้องการเก็บเฉพาะส่วนที่สัมพันธ์กันคุณเพียงแค่เพิ่ม.Substring((pwd).Path.Trim('\').Length + 1)และ voila!
fred\frag
อัปเดต
ขอบคุณ @Dangph ที่ชี้ให้เห็นถึงC:\ขอบคดี