我想寫一個PowerShell的自定義提示,我想知道如何篩選出Get-Location
的輸出中的1 ... n目錄。如何從Get-Location輸出中刪除部分路徑?
function prompt {
"PS " + $(get-location) + "> "
}
所以,如果路徑太長,我想省略一些目錄,只是顯示PS...blah\blah>
什麼的。我試過(get-container) - 1
但它不起作用。
我想寫一個PowerShell的自定義提示,我想知道如何篩選出Get-Location
的輸出中的1 ... n目錄。如何從Get-Location輸出中刪除部分路徑?
function prompt {
"PS " + $(get-location) + "> "
}
所以,如果路徑太長,我想省略一些目錄,只是顯示PS...blah\blah>
什麼的。我試過(get-container) - 1
但它不起作用。
Ansgar Wiechers' answer會給你最後一個目錄,但如果你想辦法在的做底多個目錄文件路徑(使用三聯點表示),你可以cast the directory path到URI,然後就拿到並加入segments:
function prompt {
$curPath = pwd
$pathUri = ([uri] $curPath.ToString())
if ($pathUri.Segments.Count -le 3) {
"PS {0}>" -f $curPath
} else {
"PS...{0}\{1}>" -f $pathUri.Segments[-2..-1].trim("/") -join ""
}
}
或者只使用一個字符串(無URI投)
function prompt {
$curPath = pwd
$pathString = $curPath.Tostring().split('\') #Changed; no reason for escaping
if ($pathString.Count -le 3) {
"PS {0}>" -f $curPath
} else {
"PS...{0}\{1}>" -f $pathString[-2..-1] -join ""
}
}
$a = prompt
Write-Host $a
然後,只需改變-2,無論你想成爲第一個目錄和-le 3相匹配。當我必須通過瀏覽器或通過與Linux機器的連接運行東西(因爲它使用「/」作爲路徑分隔符)時,我通常使用uri轉換,但沒有理由不對正常操作使用字符串方法。
總是忘記URI轉換 – Matt
@Matt謝謝,看到了,但添加了一個字符串方法,所以沒有得到編輯:) – JGreenwell
我可能是錯的,但是你的「字符串」代碼有缺陷,因爲你使用的是字符串方法分裂。它不支持正則表達式,你匹配_two_斜槓 – Matt
使用Split-Path
與-Leaf
參數,如果你想只是一個路徑的最後一個元素:
function prompt {
"PS {0}> " -f (Split-Path -Leaf (Get-Location))
}
我想做一個更動態的功能。我只做了基本的字符串操作。你可以做一些邏輯嵌套Split-Path
,但字符串操作方法只是非常簡潔。既然你想要返回的東西不會是一個完全驗證的路徑,我覺得更好的解決方案。
Function Get-PartialPath($path, $depth){
If(Test-Path $path){
"PS {0}>" -f (($path -split "\\")[-$depth..-1] -join "\")
} else {
Write-Warning "$path is not a valid path"
}
}
樣本函數調用
Get-PartialPath C:\temp\folder1\sfg 2
PS folder1\sfg>
所以你可以使用這個簡單的功能。 Pass是路徑的字符串。假設它是有效的,那麼它將根據需要劃分出盡可能多的尾部塊。我們使用-join
來重建它。如果您給$depth
的號碼太高,則會返回整個路徑。所以如果你只想要顯示3個文件夾,將$depth
設置爲3.
你是否想過只顯示最後的x個目錄?拆分路徑是一個簡單的方法去! – Matt