शेल प्रॉम्प्ट में केवल वर्तमान फ़ोल्डर का नाम प्रदर्शित करने के लिए Windows Powershell कॉन्फ़िगर करें


37

मैं Windows 7 में Powershell का उपयोग कर रहा हूं। Powershell को कॉन्फ़िगर कैसे करें ताकि यह केवल शेल फ़ोल्डर में वर्तमान फ़ोल्डर नाम (पूर्ण पथ के बजाय) प्रदर्शित हो?

उदाहरण के लिए, इसके बजाय C:\folder\directory\name>, मैं चाहता हूं name>

जवाबों:


57

आपको अपने PowerShell प्रोफ़ाइल में प्रॉम्प्ट फ़ंक्शन को कस्टमाइज़ करना होगा ( %userprofile%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1); यह रिक्त हो सकता है या यहां तक ​​कि मौजूद नहीं हो सकता है अगर आपने इसे पहले कभी संशोधित नहीं किया है।

  1. अपनी प्रोफ़ाइल खोलें (उदाहरण के लिए, उपरोक्त फ़ाइल खोलें या PowerShell में Notepad $profile)

  2. अपनी प्रोफ़ाइल में निम्नलिखित जोड़ें:

    function prompt {
      $p = Split-Path -leaf -path (Get-Location)
      "$p> "
    }
    
  3. प्रोफ़ाइल सहेजें

  4. PowerShell को पुनरारंभ करें

    वैकल्पिक । यदि आपको कोई संदेश मिलता है जो कहता है कि आपको स्क्रिप्ट चलाने की अनुमति नहीं है, तो आपको इस पंक्ति को PowerShell में कॉपी / पेस्ट करने की आवश्यकता है:

    Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
    

    और पुनः आरंभ करें।

Windows PowerShell निष्पादन नीतियाँ आपको उन शर्तों को निर्धारित करने देती हैं जिनके तहत Windows PowerShell कॉन्फ़िगरेशन फ़ाइलों को लोड करता है और स्क्रिप्ट चलाता है।

आप स्थानीय कंप्यूटर के लिए, वर्तमान उपयोगकर्ता के लिए, या किसी विशेष सत्र के लिए एक निष्पादन नीति निर्धारित कर सकते हैं। आप कंप्यूटर और उपयोगकर्ताओं के लिए निष्पादन नीति निर्धारित करने के लिए समूह नीति सेटिंग का भी उपयोग कर सकते हैं।

स्रोत: Microsoft प्रलेखन


1
बिलकुल ठीक नहीं। [System.IO.Directory]::GetCurrentDirectory()पॉवरशेल के वर्तमान स्थान का प्रतिनिधित्व नहीं करता है, बल्कि प्रक्रिया कार्य निर्देशिका, जो हमेशा समान नहीं होती है। से बदलेंGet-Location
zdan

+1, लेकिन मैं इसके स्थान पर गेट-लोकेशन का उपयोग करूंगा GetCurrentDirectory। याद रखें कि PowerShell का हमेशा फ़ाइल सिस्टम से मतलब नहीं होता है। रजिस्ट्री स्नैप-इन का उपयोग करते हुए, मैं उपयोग कर सकता था cd hkcu:और अब प्रॉम्प्ट पूरी तरह से बंद हो जाएगा।
vcsjones

@Synetech यह प्रारूपण सहायता में काफी गहरे दबे हुए हैं: \
बॉब

1
आप $PWDकॉलिंग के बजाय भी उपयोग कर सकते हैं Get-Location। जैसेfunction prompt { (Split-Path -Leaf $pwd) + '> ' }
जोए

1
आपको promptअपनी प्रोफ़ाइल फ़ाइल में परिभाषित करने की आवश्यकता नहीं है । यह सिर्फ वैश्विक सत्र के दायरे में होना चाहिए। डिफ़ॉल्ट के बराबर लगता है function prompt {"PS " + (Get-Location) + ">"}, जबकि के function prompt {""}रूप में ही देता है function prompt {"PS>"}function prompt {" `b"}खाली प्रॉम्प्ट (कम से कम नेत्रहीन ...) प्राप्त करने के लिए उपयोग करें ।
मास्टरएक्सिलो

5

एक अतिरिक्त नोट के रूप में, मैं @ Synetech कमांड तब तक नहीं कर सका जब तक मैंने पहली बार $ प्रोफ़ाइल नहीं बनाई।

  1. PowerShell खोलें
  2. टाइप करें $profileऔर एंटर करें। यह प्रोफ़ाइल पथ प्रदर्शित करेगा PowerShell पर निर्भर करता है, भले ही यह मौजूद नहीं है (यह मेरे लिए नहीं था)। मेरा रास्ता ऊपर पोस्ट किए गए @Synetech से अलग था।

    >$profile
    C:\Users\[username]\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
    
  3. मुझे WindowsPowerShell फ़ोल्डर और Microsoft.PowerShell_profile.ps1 फ़ाइल दोनों बनाने थे।

  4. @ Synetech का कोड जोड़ें और PowerShell को पुनरारंभ करें।

ध्यान दें:

यदि आप पॉश-गिट का उपयोग कर रहे हैं (जो कि GitHub डेस्कटॉप का उपयोग करते समय स्थापित किया गया है), तो @ Synetech की स्क्रिप्ट पॉश-गिट प्रॉम्प्ट को ओवरराइड कर देगी। यहां पॉश-गिट के लिए अतिरिक्त त्वरित स्क्रिप्ट ।


1
यह ऐसा ही है। %userprofile%के लिए विस्तारितC:\Users\[username]
DavidPostill

@DavidPostill जो मेरी समझ थी, लेकिन मेरे PowerShell ने% userprofile% को एक निर्देशिका के रूप में नहीं पहचाना। मुझे विश्वास नहीं है कि मेरे PowerShell को अभी तक उन रास्तों को पहचानने के लिए अनुकूलित किया गया है, शायद नेटवर्क सेटिंग्स के कारण?
ब्रायन

2
वाक्य रचना PowerShell में अलग है: $Env:userprofileके बराबर हैecho %userprofile%
DavidPostill

ISE बनाम नियमित प्रॉम्प्ट में $ प्रोफ़ाइल का एक अलग मूल्य है, आपको 2 फाइलें बनानी पड़ सकती हैं।
क्रिस

3

पूर्ण पथ के बिना वर्तमान फ़ोल्डर दिखाने के लिए और अंत में प्रतीक से बड़ा होने के लिए संकेत बदलें:

एक तरीका हो सकता है:

Function Prompt { "$( ( get-item $pwd ).Name )>" }

या:

Function Prompt { "$( Split-Path -leaf -path (Get-Location) )>" }

या:

Function Prompt { "$( ( Get-Location | Get-Item ).Name )>" }

पहले और तीसरे में स्वीकृत उत्तर से बेहतर है कि वे नेटवर्क फ़ोल्डर्स के लिए काम करते हैं। स्प्लिट-पाथ सही तरह से एक पथ पर कार्य नहीं करेगा \\myserver\my\path
क्रिस

2

मैंने पाया कि यह बहुत आसान था - @ Synetech के उत्तर और पॉवरशेल प्रोफाइल में मिली जानकारी का संयोजन । क्योंकि मैं पीएस के लिए नौसिखिया हूं। मेरे कदम (vscode के लिए):

  1. परीक्षण-पथ $ प्रोफ़ाइल (PS कमांड प्रॉम्प्ट में - क्या कोई प्रोफ़ाइल सेट है?)
  2. नया-आइटम -path $ प्रोफ़ाइल -ememype फ़ाइल -फोर्स (ऊपर दिए गए उत्तर को गलत मानते हुए)
  3. नोटपैड $ प्रोफ़ाइल (नोटपैड खोलता है)
  4. में पेस्ट करें

    function prompt {
      $p = Split-Path -leaf -path (Get-Location)
      "$p> "
    }
    
  5. सहेजें (आपको एक स्थान नहीं चुनना चाहिए, यह आपके लिए पहले से ही किया गया है)
  6. पुनः लोड बनाम - आपको संभवतः स्क्रिप्ट चलाने के बारे में एक संदेश मिलेगा (या बस पुनः लोड करने से पहले अगला कदम रखें)
  7. Set-ExecutionPolicy RemoteSigned -Scope CurrentUser (आपके PS प्रॉम्प्ट पर, SuperUse उत्तर से)

  8. पुनः लोड करें

तो ज्यादातर @ Synetech का उत्तर (उत्कीर्ण) एक बिट के साथ आसानी से शुरू करने के लिए - विशेष रूप से चरण 2 यह बहुत आसान बनाता है।


0

नीचे दी गई सिंगल लाइन मेरे लिए ठीक काम करती है

(गेट-लोकेशन | गेट-आइटम) ।नाम


यह सवाल नहीं था - ऊपर Jelgab
hfrmobile
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.