28

I'm using Powershell in Windows 7. How to configure Powershell so that it only displays the current folder name (instead of the full path) in the shell prompt?

For example, Instead of C:\folder\directory\name>, I want name>.

44

You have to customize the prompt function in your PowerShell profile (%userprofile%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1); it may be blank or even not exist if you have never modified it before.

  1. Open your profile (e.g., open the aforementioned file or while in PowerShell, Notepad $profile)

  2. Add the following to your profile:

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

  4. Restart PowerShell

    Optional. If you get a message that says you are not allowed to run scripts, then you need to copy/paste this line in PowerShell:

    Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
    

    and restart.

Windows PowerShell execution policies let you determine the conditions under which Windows PowerShell loads configuration files and runs scripts.

You can set an execution policy for the local computer, for the current user, or for a particular session. You can also use a Group Policy setting to set execution policy for computers and users.

Source: Microsoft Documentation

  • 1
    Not quite right. [System.IO.Directory]::GetCurrentDirectory() does not represent powershell's current location, but rather the process working directory, which are not always the same. Replace with Get-Location – zdan Jul 9 '12 at 20:57
  • +1, but I would use get-location instead of GetCurrentDirectory. Remember that PowerShell does not always mean the file system. Using the registry snap-in, I could use cd hkcu: and now the prompt would be totally off. – vcsjones Jul 9 '12 at 20:58
  • I don't use PowerShell (it is excruciatingly slow on my system), so I am not familiar with its intricacies. I have changed the call and improved the formatting. – Synetech Jul 9 '12 at 21:01
  • 1
    You can also use $PWD instead of calling Get-Location. E.g. function prompt { (Split-Path -Leaf $pwd) + '> ' } – Joey Nov 6 '13 at 11:43
  • 1
    You don't have to define prompt in your profile file. It just has to be in the global session scope. The default seems equivalent to function prompt {"PS " + (Get-Location) + ">"}, while function prompt {""} gives the same as function prompt {"PS>"}. Use function prompt {" `b"} to get an empty prompt (at least visually...). – masterxilo Dec 17 '17 at 10:31
3

As an additional note, I couldn't do @Synetech's command until I first created the $profile.

  1. Open PowerShell
  2. Type $profile and hit enter. This will display the profile path PowerShell relies on, even if it doesn't exist (it didn't for me). My path was different than what @Synetech posted above.

    >$profile
    C:\Users\[username]\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
    
  3. I had to create both the WindowsPowerShell folder and Microsoft.PowerShell_profile.ps1 file.

  4. Add @Synetech's code and restart PowerShell.

Note:

If you're using posh-git (which is installed when using GitHub desktop), @Synetech's script will override the posh-git prompt. Additional prompt scripts for posh-git here.

  • 1
    It's the same. %userprofile% expands to C:\Users\[username] – DavidPostill Mar 15 '17 at 15:39
  • @DavidPostill that was my understanding, but my PowerShell didn't recognize %userprofile% as a directory. I don't believe my PowerShell is customized yet to recognize those paths, perhaps due to network settings? – Bryan Mar 15 '17 at 15:56
  • 2
    The syntax is different in PowerShell: $Env:userprofile is equivalent to echo %userprofile% – DavidPostill Mar 15 '17 at 16:37
1

Change the prompt to show current folder without full path and greater than symbol at the end:

One way could be:

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

Or:

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

Or:

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

I found this was pretty easy - combining @Synetech's answer and the info found at PowerShell profiles. Because I am a newbie to PS. My steps (for vscode):

  1. test-path $profile (in the PS command prompt - is there a profile set up?)
  2. new-item -path $profile -itemtype file -force (assuming the answer to the above is false)
  3. notepad $profile (opens notepad)
  4. paste in

    function prompt {
      $p = Split-Path -leaf -path (Get-Location)
      "$p> "
    }
    
  5. save (you shouldn't have to chose a location, it is already done for you)
  6. reload vscode - you will probably get a message about running scripts (or just do next step before reload)
  7. Set-ExecutionPolicy RemoteSigned -Scope CurrentUser (at your PS prompt, from the SuperUse answer)

  8. reload vscode

So mostly @Synetech's answer (upvoted) with a bit to get started easily - especially step 2 makes this very easy.

0

The below single line works fine for me

(Get-Location | Get-Item).Name

  • that wasn't the question - see above correct answer from Jelgab – hfrmobile Oct 8 '18 at 12:01

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.