Windows Powershell'i kabuk isteminde yalnızca geçerli klasör adını gösterecek şekilde yapılandırma


37

Powershell'i Windows 7'de kullanıyorum. Powershell, kabuk isteminde yalnızca geçerli klasör adını (tam yol yerine) gösterecek şekilde nasıl yapılandırılır?

Mesela yerine C:\folder\directory\name>istiyorum name>.

Yanıtlar:


57

PowerShell profilinizde bilgi istemi işlevini özelleştirmek zorundasınız ( %userprofile%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1); daha önce hiç değiştirmediyseniz boş veya hatta olmayabilir.

  1. Profilinizi açın (örneğin, yukarıda belirtilen dosyayı açın veya PowerShell'deyken Notepad $profile)

  2. Aşağıdakileri profilinize ekleyin:

    function prompt {
      $p = Split-Path -leaf -path (Get-Location)
      "$p> "
    }
    
  3. Profili kaydet

  4. PowerShell'i yeniden başlatın

    İsteğe bağlı . Komut dosyalarını çalıştırmanıza izin verilmediğini bildiren bir ileti alırsanız, bu satırı PowerShell'de kopyala / yapıştırmanız gerekir:

    Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
    

    ve yeniden başlatın.

Windows PowerShell yürütme ilkeleri, Windows PowerShell'in yapılandırma dosyalarını yüklediği ve komut dosyalarını çalıştırdığı koşulları belirlemenizi sağlar.

Yerel bilgisayar, geçerli kullanıcı veya belirli bir oturum için bir yürütme politikası belirleyebilirsiniz. Bilgisayarlar ve kullanıcılar için yürütme ilkesini ayarlamak için bir Grup İlkesi ayarı da kullanabilirsiniz.

Kaynak: Microsoft Belgeleri


1
Tam olarak doğru değil. [System.IO.Directory]::GetCurrentDirectory()powershell'in şu anki yerini değil, her zaman aynı olmayan süreç çalışma dizinini temsil etmiyor. Get-Location
İle

+1, bunun yerine get-location kullanırdım GetCurrentDirectory. PowerShell’in her zaman dosya sistemi anlamına gelmediğini unutmayın. Kayıt defteri ek bileşenini kullanarak kullanabilirim cd hkcu:ve şimdi istemi tamamen kapalı olacaktır.
vcsjones

@Synetech Biçimlendirme yardımında oldukça derinlere gömülmüş : \
Bob

1
$PWDAramak yerine de kullanabilirsiniz Get-Location. Örneğinfunction prompt { (Split-Path -Leaf $pwd) + '> ' }
Joey

1
promptProfil dosyasında tanımlamak zorunda değilsin . Sadece küresel oturum kapsamında olması gerekiyor. Varsayılan eşdeğer görünüyor function prompt {"PS " + (Get-Location) + ">"}ederken, function prompt {""}aynı verir function prompt {"PS>"}. function prompt {" `b"}Boş bir bilgi istemi almak için kullanın (en azından görsel olarak ...).
masterxilo

5

Ek bir not olarak, $ profilini ilk oluşturana kadar @ Synetech'in komutunu yapamadım.

  1. PowerShell'i açın
  2. Yazın $profileve isabet girin. Bu PowerShell'in kullandığı profil yolunu gösterecektir (olmasa bile). Yolum, @ Synetech'in yukarıda yayınlananlardan farklıydı.

    >$profile
    C:\Users\[username]\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
    
  3. Hem WindowsPowerShell klasörü hem de Microsoft.PowerShell_profile.ps1 dosyasını oluşturmak zorunda kaldım.

  4. @ Synetech'in kodunu ekleyin ve PowerShell'i yeniden başlatın.

Not:

Posh-git kullanıyorsanız (GitHub masaüstünü kullanırken yüklenir), @ Synetech'in betiği posh-git komutunu geçersiz kılar. Burada posh-git için ek komut dosyaları .


1
Aynısı. %userprofile%genişlerC:\Users\[username]
DavidPostill

@DavidPostill bu benim anlayışımdı, ama PowerShell'im% userprofile% dizini olarak tanımıyordu. PowerShell'imin bu yolları tanıyacak şekilde özelleştirilebileceğini sanmıyorum, belki de ağ ayarları nedeniyle?
Bryan

2
PowerShell'de sözdizimi farklıdır: $Env:userprofileeşittirecho %userprofile%
DavidPostill

$ profile İMKB'de normal isteme göre farklı bir değere sahipse, 2 dosya oluşturmanız gerekebilir.
Chris

3

Geçerli klasörü tam yolsuz ve sonunda sembolden büyük göstermek için istemi değiştirin:

Bir yol olabilir:

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

Veya:

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

Veya:

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

Birinci ve üçüncüsü, ağ klasörleri için çalıştıkları için kabul edilen cevaptan daha iyidir. Split-Path, benzeri bir yolda düzgün çalışmaz \\myserver\my\path.
Chris

2

Bunun oldukça kolay olduğunu gördüm - @ Synetech'in cevabını ve PowerShell profillerinde bulunan bilgileri birleştirerek . Çünkü ben PS’e yeni başlayan biriyim. Adımlarım (vscode için):

  1. test-path $ profile (PS komut isteminde - ayarlanmış bir profil var mı?)
  2. new-item -path $ profile -itemtype dosyası -force (yukarıdaki cevabın yanlış olduğu varsayılarak)
  3. notepad $ profili (not defteri açar)
  4. yapıştır

    function prompt {
      $p = Split-Path -leaf -path (Get-Location)
      "$p> "
    }
    
  5. kaydet (bir yer seçmek zorunda kalmamalısınız, zaten sizin için yapıldı)
  6. vscode yeniden yükle - muhtemelen komut dosyalarını çalıştırma hakkında bir mesaj alırsınız (veya yeniden yüklemeden önce bir sonraki adımı yapın)
  7. Set-ExecutionPolicy RemoteSigned -Scope CurrentUser (PS isteminizde, SuperUse yanıtından)

  8. vscode yeniden yükle

Çoğunlukla @ Synetech'in kolayca başlayabilmesi için biraz yanıt verdiği yanıt (yükseltilmiş) - özellikle 2. adım bunu çok kolaylaştırıyor.


0

Aşağıdaki tek satır benim için iyi çalışıyor

(Get-Location | Get-Öğe) .Adı


Bu bir soru değildi - yukarıdan Jelgab'ın doğru cevabına bakın
hfrmobile 08.08.2018
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.