コマンドプロンプト

echo %~dp0
pause

PowerShell(v2迄)

Split-Path -Path $MyInvocation.MyCommand.Path
$r=Read-Host

$MyInvocation.MyCommand.PathはTABやctr+スペースのインテリセンス機能で候補が表示されないが入力すれば動く。

$MyInvocation.MyCommand.Sourceにするとインテリセンスで候補が表示されて同じ結果になるが、どう違うのかが解らない。

PowerShell(v3以降)

echo $PSScriptRoot
$r=Read-Host