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

Web*_*tor 4 powershell command-prompt

我想缩短我的 PowerShell 提示符,以便它只显示父目录和当前目录。例如,如果密码是

C:\Users\ndunn\OneDrive\Documents\Webucator\ClassFiles\python-basics\Demos
Run Code Online (Sandbox Code Playgroud)

我希望提示是:

PS ..\python-basics\Demos> 
Run Code Online (Sandbox Code Playgroud)

我可以PS ..\Demos> 通过更改prompt()Profile 文件中的函数来实现它:

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

function prompt
{
  $folder = "$( ( get-item $pwd ).Name )"
  "PS ..\$folder> "
}
Run Code Online (Sandbox Code Playgroud)

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

另外,如果密码至少低两级,我只想这样做。如果密码类似于 C:\folder\folder,我想显示默认提示。

有任何想法吗?

mkl*_*nt0 8

试试下面的函数,它应该可以在 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}$('>' * ($nestedPromptLevel + 1)) " -f $displayPath
}
Run Code Online (Sandbox Code Playgroud)

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

注意:只有当包含的脚本文件(假定为您的$PROFILE文件)保存为带有 BOM [1] 的UTF-8或 UTF-16LE(“Unicode”)时,才能正确识别非 ASCII 范围字符。

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


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