आप एक संयोजन का उपयोग कर सकते हैं pwd, Join-Pathऔर [System.IO.Path]::GetFullPathपूरी तरह से योग्य विस्तारित पथ प्राप्त करने के लिए।
चूंकि cd( Set-Location) प्रक्रिया वर्तमान कार्य निर्देशिका को परिवर्तित नहीं करता है, बस किसी .NET फ़ाइल के सापेक्ष फ़ाइल नाम को पारित करना, जो 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और बस इसे सुंदर बनाने के लिए है)। यदि आप केवल सापेक्ष भाग ही रखना चाहते हैं , तो आप केवल जोड़ और वॉयला चाहते हैं!pwdGetFullPath.Substring((pwd).Path.Trim('\').Length + 1)
fred\frag
अपडेट करें
C:\किनारे के मामले को इंगित करने के लिए @ डांगफ के लिए धन्यवाद ।