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)

相关内容