配置 Windows PowerShell 以在 shell 提示符中仅显示当前文件夹名称

配置 Windows PowerShell 以在 shell 提示符中仅显示当前文件夹名称

我在 Windows 7 上使用 PowerShell。如何配置 PowerShell 以便它仅在 shell 提示符中显示当前文件夹名称(而不是完整路径)?

例如,C:\folder\directory\name>我想要 ,而不是name>

答案1

您必须在 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 文档

答案2

更改提示以显示当前文件夹,但不显示完整路径,并且在末尾显示大于号:

一种方法可能是:

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

或者:

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

或者:

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

答案3

另外需要注意的是,我做不到Synetech 的命令直到我第一次创建$profile。

  1. 打开 PowerShell

  2. 输入$profile并按回车键。这将显示 PowerShell 所依赖的配置文件路径,即使它不存在(对我来说不存在)。我的路径与Synetech 发布的内容

     >$profile
     C:\Users\[username]\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
    
  3. 我必须创造WindowsPowerShell文件夹和Microsoft.PowerShell_配置文件.ps1文件。

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

笔记:

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

答案4

我想要一个更复杂的提示,于是构造了一个新提示。这个答案并不是要取代当前的答案,而是为了给后来偶然发现这个问题的人提供补充。这个提示将完全支持网络路径,而且看起来非常优雅。

function Prompt
{
    write-host "PS " -ForegroundColor Magenta -NoNewline
    write-host (get-date -Format "yyyy-MM-dd HH:mm:ss") -ForegroundColor Yellow -NoNewline
    write-host " | " -ForegroundColor DarkGray -NoNewline
    write-host "\\$env:COMPUTERNAME " -NoNewline
    write-host " | " -ForegroundColor DarkGray -NoNewline
    if( (Get-Location).Drive -ne $null)
    {
        write-host (Get-Location) 
        $networkdrive = $false
    }
    else
    {
        $networkdrive = $true
        $first, $second, $third, $folder = (Get-Location).path.Split("\")
        write-host "\" -NoNewline
        $folder | foreach-object {
            write-host "\$_" -NoNewline
        }
        write-host
    }
    write-host "PS " -ForegroundColor Magenta -NoNewline
    if( (Get-Location).Drive -ne $null)
    {
        write-host "$((Get-Location).Drive):\"  -NoNewline
    }
    else
    {
        write-host "\\$((Get-Location).path.Split("\")[3])\"  -NoNewline
    }

    if( (Get-Location).path.Split("\").Count -gt 2 -and $networkdrive -eq $false)
    {
        write-host "…\"  -NoNewline
    }
    if( (Get-Location).path.Split("\").Count -gt 5 -and $networkdrive -eq $true)
    {
        write-host "…\"  -NoNewline
    }    write-host "$((Get-Location).path.Split("\")[-1])"  -NoNewline
    write-host ">" -NoNewline
    return " "
}

它将显示如下提示:

PS 2021-03-24 02:03:39 | \\MYPC  | \\Server\Share\Folder1\Folder2
PS \\Server\…\Folder2> cd c:\Users\User
PS 2021-03-24 02:03:39 | \\MYPC  | C:\Users\User
PS C:\…\User>

相关内容