我想缩短我的PowerShell提示符,使其仅显示父目录和当前目录。例如,如果密码是
C:\Users\ndunn\OneDrive\Documents\Webucator\ClassFiles\python-basics\Demos
我希望提示是:
PS ..\python-basics\Demos>
通过更改配置文件中的PS ..\Demos>
函数,我可以将其变为prompt()
:
$profile
查找配置文件的位置。prompt()
函数:function prompt
{
$folder = "$( ( get-item $pwd ).Name )"
"PS ..\$folder> "
}
我尝试使用split()
和否定索引,但无法使其正常工作。
此外,我只想在pwd至少下降两级时执行此操作。如果密码是C:\ folder \ folder之类的,我想显示默认提示。
有什么想法吗?
答案 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)