2010-11-01 11 views
11

मुझे उम्मीद है कि यह छोटी शक्तियां एक लाइनर foo.txt पर एक पूर्ण पथ गूंजने के लिए, जहां निर्देशिका मेरी वर्तमान निर्देशिका है।

[System.IO.Path]::GetFullPath(".\foo.txt") 

लेकिन ऐसा नहीं है। यह प्रिंट करता है ...

C:\Documents and Settings\Administrator\foo.txt 

मैं $ होम निर्देशिका में नहीं हूं। यह वहां क्यों हल हो रहा है?

+2

आप powershell के भीतर का उपयोग करना चाहिए हल-पथ। – x0n

उत्तर

16

[System.IO.Path] खोल प्रक्रिया 'वर्तमान निर्देशिका उपयोग कर रहा है:

PS C:\> [System.IO.Directory]::GetCurrentDirectory() 
C:\Documents and Settings\user 
PS C:\> get-location 

Path 
---- 
C:\ 

मैं आप उन्हें मैच के लिए प्राप्त करने के लिए SetCurrentDirectory इस्तेमाल कर सकते हैं लगता है। आप Resolve-Path cmdlet के साथ निरपेक्ष पथ प्राप्त कर सकते हैं:

Resolve-Path .\foo.txt 
+1

यह व्यवहार ग्रह पर हर दूसरे शेल-स्क्रिप्टिंग सिस्टम के साथ अनजान और असंगत है। बेशक। धन्यवाद, शेक ओवरफ्लो उपयोगकर्ता जैसे शै, हमें केवल मनुष्यों को पावरहेल समझने में मदद करने के लिए! –

+3

'समाधान-पथ' की कमी यह है कि यह केवल उन पथों को हल कर सकती है जो वास्तव में मौजूद हैं। – herzbube

+0

आह। इसलिए जिस पथ को आप बनाने की योजना बना रहे हैं उसे ग्लोब या विस्तारित करने के लिए, आप इसका उपयोग नहीं कर सकते हैं। –

10

GetFullPath के लिए प्रलेखन के अनुसार, यह पूर्ण पथ को हल करने के लिए वर्तमान कार्य निर्देशिका का उपयोग करता है। powershell वर्तमान कार्यशील निर्देशिका वर्तमान स्थान के समान नहीं है:

PS C:\> [System.IO.Directory]::SetCurrentDirectory($(get-location)) 
PS C:\> [System.IO.Path]::GetFullPath(".\foo.txt") 
C:\foo.txt 
+0

मेरे पास मेरा त्वरित फ़ंक्शन ऐसा करता है, वर्तमान कार्यशील निर्देशिका को अद्यतन करता है। – JasonMArcher

+0

यह केवल तभी काम करेगा जब मौजूदा स्थान फाइल सिस्टम में है। $ PWD.Provider.Name पहले जांचें। प्रदाता नाम की जांच के बिना –

+0

सही तरीका: [पर्यावरण] :: CurrentDirectory = (Get-location -PSProvider FileSystem) .ProviderPath –

संबंधित मुद्दे