Konfigurasikan Windows Powershell untuk hanya menampilkan nama folder saat ini di prompt shell

37

Saya menggunakan Powershell di Windows 7. Bagaimana mengkonfigurasi Powershell sehingga hanya menampilkan nama folder saat ini (bukan path lengkap) di prompt shell?

Misalnya, Alih-alih C:\folder\directory\name>, saya mau name>.

Veera
sumber

Jawaban:

57

Anda harus menyesuaikan fungsi prompt di profil PowerShell Anda ( %userprofile%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1); mungkin kosong atau bahkan tidak ada jika Anda belum pernah memodifikasinya sebelumnya.

  1. Buka profil Anda (misalnya, buka file yang disebutkan di atas atau saat di PowerShell, Notepad $profile)

  2. Tambahkan yang berikut ke profil Anda:

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

  4. Mulai ulang PowerShell

    Opsional . Jika Anda mendapatkan pesan yang mengatakan Anda tidak diizinkan menjalankan skrip, maka Anda perlu menyalin / menempelkan baris ini di PowerShell:

    Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
    

    dan mulai kembali.

Kebijakan eksekusi Windows PowerShell memungkinkan Anda menentukan kondisi di mana Windows PowerShell memuat file konfigurasi dan menjalankan skrip.

Anda dapat menetapkan kebijakan eksekusi untuk komputer lokal, untuk pengguna saat ini, atau untuk sesi tertentu. Anda juga dapat menggunakan pengaturan Kebijakan Grup untuk menetapkan kebijakan eksekusi untuk komputer dan pengguna.

Sumber: Dokumentasi Microsoft

Synetech
sumber
1
Tidak benar. [System.IO.Directory]::GetCurrentDirectory()tidak mewakili lokasi powershell saat ini, melainkan direktori proses proses, yang tidak selalu sama. Ganti denganGet-Location
zdan
+1, tapi saya akan menggunakan get-location bukan GetCurrentDirectory. Ingatlah bahwa PowerShell tidak selalu berarti sistem file. Dengan menggunakan registry snap-in, saya bisa menggunakan cd hkcu:dan sekarang prompt akan benar-benar mati.
vcsjones
@Synetech Sudah terkubur cukup dalam di bantuan format: \
Bob
1
Anda juga dapat menggunakan $PWDalih-alih menelepon Get-Location. Misalnyafunction prompt { (Split-Path -Leaf $pwd) + '> ' }
Joey
1
Anda tidak perlu mendefinisikan promptdalam file profil Anda. Itu hanya harus dalam ruang lingkup sesi global. Defaultnya tampak setara dengan function prompt {"PS " + (Get-Location) + ">"}, sementara function prompt {""}memberikan yang sama dengan function prompt {"PS>"}. Gunakan function prompt {" `b"}untuk mendapatkan prompt kosong (setidaknya secara visual ...).
masterxilo
5

Sebagai catatan tambahan, saya tidak bisa melakukan perintah @ Synetech sampai saya pertama kali membuat $ profil.

  1. Buka PowerShell
  2. Ketik $profiledan tekan enter. Ini akan menampilkan jalur profil yang mengandalkan PowerShell, bahkan jika itu tidak ada (tidak untuk saya). Path saya berbeda dari yang diposkan @Synetech di atas.

    >$profile
    C:\Users\[username]\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
    
  3. Saya harus membuat folder WindowsPowerShell dan file Microsoft.PowerShell_profile.ps1.

  4. Tambahkan kode @ Synetech dan restart PowerShell.

catatan:

Jika Anda menggunakan posh-git (yang diinstal saat menggunakan desktop GitHub), skrip @ Synetech akan mengesampingkan prompt posh-git. Skrip prompt tambahan untuk posh-git di sini .

Bryan
sumber
1
Itu sama. %userprofile%meluas keC:\Users\[username]
DavidPostill
@ DavidPostill yang merupakan pemahaman saya, tetapi PowerShell saya tidak mengenali% userprofile% sebagai direktori. Saya tidak percaya PowerShell saya sudah dikustomisasi untuk mengenali jalur tersebut, mungkin karena pengaturan jaringan?
Bryan
2
Sintaksnya berbeda dalam PowerShell: $Env:userprofilesetara denganecho %userprofile%
DavidPostill
$ profile memiliki nilai berbeda dalam ISE vs prompt reguler, Anda mungkin harus membuat 2 file.
Chris
3

Ubah prompt untuk menampilkan folder saat ini tanpa path lengkap dan lebih besar dari simbol di akhir:

Salah satu caranya adalah:

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

Atau:

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

Atau:

Function Prompt { "$( ( Get-Location | Get-Item ).Name )>" }
Jelgab
sumber
Yang pertama dan ketiga lebih baik daripada jawaban yang diterima karena mereka bekerja untuk folder jaringan. Split-Path tidak akan berfungsi dengan benar pada path seperti \\myserver\my\path.
Chris
2

Saya menemukan ini cukup mudah - menggabungkan jawaban @ Synetech dan info yang ditemukan di profil PowerShell . Karena saya seorang pemula untuk PS. Langkah saya (untuk vscode):

  1. test-path $ profile (di prompt perintah PS - apakah ada pengaturan profil?)
  2. new-item -path $ profile -itemtype file -force (anggap jawaban di atas salah)
  3. notepad $ profile (membuka notepad)
  4. rekatkan

    function prompt {
      $p = Split-Path -leaf -path (Get-Location)
      "$p> "
    }
    
  5. simpan (Anda tidak harus memilih lokasi, itu sudah dilakukan untuk Anda)
  6. reload vscode - Anda mungkin akan mendapatkan pesan tentang menjalankan skrip (atau cukup lakukan langkah berikutnya sebelum memuat ulang)
  7. Set-ExecutionPolicy RemoteSigned -Scope CurrentUser (pada prompt PS Anda, dari jawaban SuperUse)

  8. muat ulang vscode

Jadi sebagian besar jawaban @ Synetech (terbalik) dengan sedikit untuk memulai dengan mudah - terutama langkah 2 membuatnya sangat mudah.

Menandai
sumber
0

Baris tunggal di bawah ini berfungsi dengan baik untuk saya

(Dapatkan-Lokasi | Dapatkan-Barang). Nama

Cannon Earnest
sumber
itu bukan pertanyaan - lihat jawaban yang benar di atas dari Jelgab
hfrmobile