如何在powershell提示符中使用波浪号?

时间:2016-08-27 22:29:21

标签: powershell command-prompt

所以我明白了:

function global:prompt {
    # Commands go here
}

在powershell中设置提示。我可以使用Get-Location来获取当前的工作目录。我可以cd ~并且在我家里。

但我可以提示使用代字号吗?例如,如果我在/home/mike中,它应该只显示~

我尝试过测试:

$pwd -contains $home

但结果并不正确。

如何在powershell的提示符中使用〜?

1 个答案:

答案 0 :(得分:7)

您可以使用普通字符串替换将$HOME替换为~。实施例

获取当前的提示功能:

Get-Content Function:\prompt

    "PS $($executionContext.SessionState.Path.CurrentLocation)$('>' * ($nestedPromptLevel + 1)) ";
    # .Link
    # http://go.microsoft.com/fwlink/?LinkID=225750
    # .ExternalHelp System.Management.Automation.dll-help.xml

当当前路径为$home~时,请将$home替换为$home\*

使用开关(可读):

function global:prompt {

    $path = switch -Wildcard ($executionContext.SessionState.Path.CurrentLocation.Path) {
        "$HOME" { "~" }
        "$HOME\*" { $executionContext.SessionState.Path.CurrentLocation.Path.Replace($HOME, "~") }
        default { $executionContext.SessionState.Path.CurrentLocation.Path }
    }

    "PS $path$('>' * ($nestedPromptLevel + 1)) ";
}

使用正则表达式(推荐):

function global:prompt {

    $regex = [regex]::Escape($HOME) + "(\\.*)*$"

    "PS $($executionContext.SessionState.Path.CurrentLocation.Path -replace $regex, '~$1')$('>' * ($nestedPromptLevel + 1)) ";

}

使用Split-Path(丑陋):

function global:prompt {

    $path = $executionContext.SessionState.Path.CurrentLocation.Path
    $p = $path

    while ($p -ne "") {
        if($p -eq $HOME) { $path = $path.Replace($HOME,"~"); break}
        $p = Split-Path $p
    }

    "PS $path$('>' * ($nestedPromptLevel + 1)) ";

}

演示:

PS C:\> cd ~

PS ~> cd .\Desktop

PS ~\Desktop>