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

Возможно, вы захотите использовать строки формата для расширения переменной внутри замены Regex:

$($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)

Связанный контент