others - 如何更改PowerShell提示, 只显示父目录和当前目录?

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


C:UsersndunnOneDriveDocumentsWebucatorClassFilespython-basicsDemos



我希望提示是:


PS ..python-basicsDemos> 



我可以通过更改配置文件中的prompt()函数来使它只是PS ..Demos>

  • 在PowerShell中运行$profile查找配置文件的位置,
  • 打开(或创建并打开)配置文件,
  • 更改(或添加)以下prompt()函数:
  • 
    function prompt
    
    
    {
    
    
     $folder ="$( ( get-item $pwd ).Name )"
    
    
    "PS ..$folder>"
    
    
    }
    
    
    
    

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

时间:

尝试以下功能,该功能应该在Windows和unix类似平台(在PowerShell内核中)一样工作:


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)来表示路径中省略的部分,因为..可以引用父目录。

注意:如果脚本文件被认为是你的$PROFILE文件,则non-ASCII-range …字符只能被认为是UTF-8 [1]或UTF-16LE ("

如果不适用于你,请使用三个不同的句点('...'而不是'…' ),但是请注意,这将导致更长的提示。

试试这个


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""


}



...