如何更改PowerShell提示符以仅显示父目录和当前目录?

时间:2019-10-26 20:18:43

标签: powershell command-prompt

我想缩短我的PowerShell提示符,使其仅显示父目录和当前目录。例如,如果密码是

C:\Users\ndunn\OneDrive\Documents\Webucator\ClassFiles\python-basics\Demos

我希望提示是:

PS ..\python-basics\Demos> 

通过更改配置文件中的PS ..\Demos>函数,我可以将其变为prompt()

  1. 通过在PowerShell中运行$profile查找配置文件的位置。
  2. 打开(或创建并打开)配置文件。
  3. 更改(或添加)以下prompt()函数:

function prompt
{
  $folder = "$( ( get-item $pwd ).Name )"
  "PS ..\$folder> "
}

我尝试使用split()和否定索引,但无法使其正常工作。

此外,我只想在pwd至少下降两级时执行此操作。如果密码是C:\ folder \ folder之类的,我想显示默认提示。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

尝试以下功能,该功能应可在Windows和类似Unix的平台(在PowerShell Core 中)相同地工作:

function global:prompt {
  $dirSep = [IO.Path]::DirectorySeparatorChar
  $pathComponents = $PWD.Path.Split($dirSep)
  $displayPath = if ($pathComponents.Count -le 3) {
    $PWD.Path
  } else {
    '…{0}{1}' -f $dirSep, ($pathComponents[-2,-1] -join $dirSep)
  }
  "PS {0}> " -f $displayPath
}

请注意,我选择了单个字符HORIZONTAL ELLIPSIS, U+2026)来表示路径的省略部分,因为..可能与引用 parent < / em>目录。

注意:仅当封闭的脚本文件(假定为您的文件)或者与BOM一起保存为UTF-8 时,才能正确识别非ASCII范围的$PROFILE字符 [1] 或UTF-16LE(“ Unicode”)。

如果由于某种原因对您不起作用,请使用三个不同的句点('...'而不是'…'),但请注意,这会导致提示时间更长。


[1] BOM仅是 Windows PowerShell 中的必需项;相比之下,PowerShell Core 默认情况下采用UTF-8,因此不需要BOM。

答案 1 :(得分:0)

尝试一下(评论太久了):

function prompt 
{
    $aux=$executionContext.SessionState.Path.CurrentFileSystemLocation.Path -Split '\\|\/'
    if ( $aux.Count -le 3 ) {
        Write-Host ("PS $($aux -join '\')>") -NoNewline # -ForegroundColor Cyan
    } else {
        Write-Host ("PS $($aux[0])\..\$($aux[-2..-1] -join '\')>") -NoNewline # -ForegroundColor Cyan
    }
    return " "
}

答案 2 :(得分:0)

这些其他答复涉及更多。即便如此,这是我的。如果长度大于30个字符,我们会缩短路径。完成。

equeue

enter image description here