PowerShell 替換提示中的 $env:USERPROFILE

PowerShell 替換提示中的 $env:USERPROFILE

我的意思是進入 PS 5.1 提示符

~\Documents

代替

C:\Users\USER1\Documents

但是在嘗試其中一個“構建塊”時我收到錯誤

> $($executionContext.SessionState.Path.CurrentLocation) -replace $env:USERPROFILE, '~'
The regular expression pattern C:\Users\USER1 is not valid.
At line:1 char:3
...

我的意思是將此包含在

$ESC = [char]27
$BLUE="$ESC[1;34m"
$RESET="$ESC[0m"
function prompt  
{  
    $cwd = $($executionContext.SessionState.Path.CurrentLocation) ;
    # $my_new_var=USE THE REPLACING COMMAND
    "$BLUE$my_new_var$('>' * ($nestedPromptLevel + 1)) $RESET"  
}

我該如何逃脫$env:USERPROFILE才能使其發揮作用? 這會在我的內部起作用prompt嗎?

答案1

這將完成您正在尋找的替換:

($executionContext.SessionState.Path.CurrentLocation).ToString().Replace($env:USERPROFILE, '~')

答案2

也許您想使用格式字串來擴展正規表示式替換中的變數:

$($executionContext.SessionState.Path.CurrentLocation) -replace ("{0}" -f $env:USERPROFILE), '~'

答案3

如果移動到 $HOME 目錄之上,可能會遇到麻煩。如果您總是想要路徑的最後一個元素,我會使用以下其中之一:

'~\{0} -f ($executionContext.SessionState.Path.CurrentLocation).Path.Split('\')[-1]
'~\{0}' -f (Split-Path ($executionContext.SessionState.Path.CurrentLocation).Path -Leaf)

相關內容