คุณสามารถใช้การรวมกันของ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:\
ขอบคดี