How to normalize a path in PowerShell? -


मेरे पास दो पथ हैं:

  fred \ frog  

और

  .. \ frag  

मैं उनसे इस तरह PowerShell में एक साथ जोड़ सकते हैं:

  join -पैथ 'फ्रैड \ फ्रॉग' '.. \ frag'  

ये मुझे यह देता है:

  fred \ frog \ .. \ frag  

लेकिन मुझे यह नहीं चाहिए मुझे डबल डॉट्स के बिना सामान्यीकृत पथ चाहिए, जैसे:

  fred \ frag  

मैं यह कैसे कर सकता हूं?

आप pwd , जॉइन-पथ और [सिस्टम.IO.Path] :: GetFullPath पूरी तरह योग्य विस्तारित पथ प्राप्त करने के लिए।

चूंकि सीडी ( Set-Location ) प्रक्रिया वर्तमान कार्यशील निर्देशिका को नहीं बदलती है, बस किसी रिश्तेदार फ़ाइल नाम को एक .net एपीआई में गुजर रहा है जो PowerShell संदर्भ को समझ में नहीं आता है, अनपेक्षित साइड-इफेक्ट्स हो सकता है, जैसे प्रारंभिक कार्यशील निर्देशिका के आधार पर पथ को हल करना ( आपका वर्तमान स्थान नहीं है)।

आप जो कर रहे हैं वह आप पहले अपने पथ को अर्हता प्राप्त कर सकते हैं:

  जुड़ें-पथ (जॉइन-पथ (पीडब्ल्यूडी) फ्र्रेड \ फ्रॉग) '.. \ Frag ' 

यह उपज (मेरे वर्तमान स्थान को दिया गया है):

  सी: \ विन्डोज \ system32 \ fred \ frog \ .. \ frag   

एक पूर्ण आधार के साथ, यह .NET API कॉल करने के लिए सुरक्षित है GetFullPa Th :

  [System.IO.Path] :: GetFullPath ((जॉइन-पथ (जॉइन-पथ (पीडब्ल्यूडी) फ्रैड \ फ्रॉग) '.. \ frag'))  

जो आपको पूर्णतया योग्य पथ देता है और .. निकाले गए हैं:

  सी: \ विन्डोज \ system32 \ fred \ Frag  

यह या तो व्यक्तिगत रूप से जटिल नहीं है, मैं इसके लिए बाह्य स्क्रिप्ट पर निर्भर समाधानों को अस्वीकार करता हूं, यह सरल समस्या को जॉइन-पथ के द्वारा हल किया गया है और pwd ( GetFullPath बस इसे सुंदर बनाने के लिए है) यदि आप केवल केवल रिश्तेदार भाग को रखना चाहते हैं, तो आप बस । सेबस्ट्रिंग ((पीडब्ल्यूडी)) जोड़ सकते हैं .Path.Trim ('\')। लंबाई + 1) और वॉयला !

  fred \ frag  

UPDATE

डांडाफ को C: \ किनारे का मामला।


Comments