Configurare Windows Powershell per visualizzare solo il nome della cartella corrente nel prompt della shell


37

Sto usando Powershell in Windows 7. Come configurare Powershell in modo che visualizzi solo il nome della cartella corrente (anziché il percorso completo) nel prompt della shell?

Ad esempio, invece di C:\folder\directory\name>, voglio name>.

Risposte:


57

Devi personalizzare la funzione prompt nel tuo profilo PowerShell ( %userprofile%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1); potrebbe essere vuoto o addirittura non esistere se non l'hai mai modificato prima.

  1. Apri il tuo profilo (ad esempio, apri il file sopra menzionato o mentre sei in PowerShell, Notepad $profile)

  2. Aggiungi quanto segue al tuo profilo:

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

  4. Riavvia PowerShell

    Opzionale . Se viene visualizzato un messaggio che dice che non è consentito eseguire script, è necessario copiare / incollare questa riga in PowerShell:

    Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
    

    e riavviare.

I criteri di esecuzione di Windows PowerShell consentono di determinare le condizioni in base alle quali Windows PowerShell carica i file di configurazione ed esegue gli script.

È possibile impostare un criterio di esecuzione per il computer locale, per l'utente corrente o per una sessione particolare. È inoltre possibile utilizzare un'impostazione di Criteri di gruppo per impostare criteri di esecuzione per computer e utenti.

Fonte: documentazione Microsoft


1
Non proprio. [System.IO.Directory]::GetCurrentDirectory()non rappresenta la posizione corrente di PowerShell, ma piuttosto la directory di lavoro del processo, che non è sempre la stessa. Sostituisci conGet-Location
zdan il

+1, ma vorrei utilizzare get-location anziché GetCurrentDirectory. Ricorda che PowerShell non significa sempre il file system. Usando lo snap-in del registro, ho potuto usare cd hkcu:e ora il prompt sarebbe completamente spento.
vcsjones,

@Synetech È sepolto abbastanza in profondità nella guida alla formattazione: \
Bob

1
Puoi anche usare $PWDinvece di chiamare Get-Location. Ad esempiofunction prompt { (Split-Path -Leaf $pwd) + '> ' }
Joey,

1
Non è necessario definire promptnel file del profilo. Deve solo essere nell'ambito della sessione globale. L'impostazione predefinita sembra equivalente a function prompt {"PS " + (Get-Location) + ">"}, mentre function prompt {""}fornisce lo stesso di function prompt {"PS>"}. Utilizzare function prompt {" `b"}per ottenere un prompt vuoto (almeno visivamente ...).
masterxilo,

5

Come nota aggiuntiva, non ho potuto eseguire il comando @ Synetech fino a quando non ho creato il profilo $.

  1. Apri PowerShell
  2. Digita $profilee premi invio. Questo mostrerà il percorso del profilo su cui si basa PowerShell, anche se non esiste (non è stato per me). Il mio percorso era diverso da quello che @Synetech ha pubblicato sopra.

    >$profile
    C:\Users\[username]\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
    
  3. Ho dovuto creare sia la cartella WindowsPowerShell che il file Microsoft.PowerShell_profile.ps1.

  4. Aggiungi il codice @ Synetech e riavvia PowerShell.

Nota:

Se stai usando posh-git (che viene installato quando usi il desktop GitHub), lo script di @ Synetech sovrascriverà il prompt posh-git. Script di prompt aggiuntivi per posh-git qui .


1
È lo stesso. %userprofile%si espande inC:\Users\[username]
DavidPostill

@DavidPostill era la mia comprensione, ma PowerShell non riconosceva% userprofile% come directory. Non credo che PowerShell sia ancora personalizzato per riconoscere quei percorsi, forse a causa delle impostazioni di rete?
Bryan,

2
La sintassi è diversa in PowerShell: $Env:userprofileè equivalente aecho %userprofile%
DavidPostill

$ profile ha un valore diverso in ISE rispetto al prompt normale, potrebbe essere necessario creare 2 file.
Chris,

3

Modificare il prompt per mostrare la cartella corrente senza percorso completo e maggiore del simbolo alla fine:

Un modo potrebbe essere:

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

O:

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

O:

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

Il primo e il terzo sono migliori della risposta accettata in quanto funzionano per le cartelle di rete. Split-Path non funzionerà correttamente su un percorso simile \\myserver\my\path.
Chris,

2

Ho scoperto che è stato abbastanza semplice: combinare la risposta di @ Synetech e le informazioni trovate nei profili di PowerShell . Perché sono un principiante di PS. I miei passi (per vscode):

  1. test-path $ profile (nel prompt dei comandi di PS - esiste un profilo impostato?)
  2. new-item -path $ profile -itemtype file -force (supponendo che la risposta a quanto sopra sia falsa)
  3. notepad $ profile (apre il blocco note)
  4. incollare

    function prompt {
      $p = Split-Path -leaf -path (Get-Location)
      "$p> "
    }
    
  5. salva (non dovresti scegliere una posizione, è già fatto per te)
  6. ricaricare vscode - probabilmente riceverai un messaggio sull'esecuzione degli script (o fai semplicemente il passo successivo prima di ricaricare)
  7. Set-ExecutionPolicy RemoteSigned -Scope CurrentUser (al prompt di PS, dalla risposta SuperUse)

  8. ricaricare vscode

Quindi soprattutto la risposta di @ Synetech (votata) con un po 'per iniziare facilmente - specialmente il passaggio 2 rende tutto molto semplice.


0

La seguente riga singola funziona bene per me

(Get-Location | Get-Item) .Nome


non era questa la domanda - vedi sopra la risposta corretta di Jelgab
hfrmobile l'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.