将Windows Powershell配置为在shell提示符中仅显示当前文件夹名称


37

我在Windows 7中使用Powershell。如何配置Powershell,使其仅在shell提示中显示当前文件夹名称(而不是完整路径)?

例如,C:\folder\directory\name>我要代替name>

Answers:


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()不代表Powershell的当前位置,而是代表进程工作目录,它们并不总是相同的。替换为Get-Location
zdan 2012年

+1,但我将使用get-location代替GetCurrentDirectory。请记住,PowerShell并不总是意味着文件系统。使用注册表管理单元,我可以使用它cd hkcu:,现在提示将完全消失。
vcsjones 2012年

@Synetech它在格式帮助中非常深:\
Bob

1
您也可以使用$PWD代替Get-Location。例如function prompt { (Split-Path -Leaf $pwd) + '> ' }
Joey

1
您无需prompt在配置文件中进行定义。它只必须在全局会话范围内。默认值似乎与相同function prompt {"PS " + (Get-Location) + ">"},而function prompt {""}与相同function prompt {"PS>"}。使用function prompt {" `b"}得到一个空的提示(至少在视觉上......)。
masterxilo

5

另外要注意的是,直到我第一次创建$ profile之前,我才能执行@Synetech的命令。

  1. 打开PowerShell
  2. 键入$profile并按Enter键。这将显示PowerShell依赖的配置文件路径,即使该路径不存在(对我而言也不是)。我的路径与@Synetech上面发布的不同。

    >$profile
    C:\Users\[username]\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
    
  3. 我必须同时创建WindowsPowerShell文件夹和Microsoft.PowerShell_profile.ps1文件。

  4. 添加@Synetech的代码并重新启动PowerShell。

注意:

如果您使用的是posh-git(在使用GitHub桌面时安装),@ Synetech的脚本将覆盖posh-git提示符。这里是posh-git的其他提示脚本。


1
一样的。%userprofile%扩展至C:\Users\[username]
DavidPostill

@DavidPostill是我的理解,但是我的PowerShell无法将%userprofile%识别为目录。我不相信我的PowerShell是自定义的,但可能由于网络设置而无法识别这些路径?
Bryan

2
PowerShell中的语法不同:$Env:userprofile等效于echo %userprofile%
DavidPostill

$ profile在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的答案和PowerShell配置文件中的信息结合起来。因为我是PS的新手。我的步骤(针对vscode):

  1. 测试路径$ profile(在PS命令提示符下-是否设置了配置文件?)
  2. new-item -path $ profile -itemtype file -force(假设以上答案为假)
  3. 记事本$ profile(打开记事本)
  4. 粘贴

    function prompt {
      $p = Split-Path -leaf -path (Get-Location)
      "$p> "
    }
    
  5. 保存(您不必选择位置,它已经为您完成了)
  6. 重新加载vscode-您可能会收到有关运行脚本的消息(或者只是在重新加载之前执行下一步)
  7. Set-ExecutionPolicy RemoteSigned -Scope CurrentUser(在PS提示符下,来自SuperUse答案)

  8. 重新加载vscode

因此,大多数@Synetech的答案(已被推荐)都带有一些容易上手的开始-尤其是步骤2使此操作非常容易。


0

下面的单行对我来说很好

(获取位置|获取项目)。名称


那不是问题-参见上述Jelgab的正确答案
hfrmobile
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.