PowerShell プロンプトで $env:USERPROFILE を置き換える

PowerShell プロンプトで $env:USERPROFILE を置き換える

PS 5.1プロンプトに入るつもりです

~\Documents

の代わりに

C:\Users\USER1\Documents

しかし、「ビルディングブロック」の1つを試しているときにエラーが発生します

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

関連情報