« PowerShell.exe -command "スクリプト" で引用符をエスケープする。 | トップページ | .NETなどのコマンドラインの引数で引用符をエスケープする。 »

2010年1月 3日 (日)

PowerShell.exe -command "スクリプト" で引用符をエスケープする。(その2)

そこで、PowerShell.exeとcmd.exeの両方でエスケープする方法です。

"スクリプト"内では、

"の左に隣接する\を2倍個の\でエスケープします。

"を\""(\と2個の")でエスケープします。

あるいは、

"を"""(3個の")でエスケープします。ただし、奇数のときは、cmd.exeのエスケープのため、+1して偶数にします。

PowerShell.exeは、"スクリプト"を評価するときに、3n個の"をn個の"に変換して、端数個の"を切り捨てるようです。
ただし、最初の端数2個の"は、例外的に1個の"に切り上げて変換するようです。

単純さで、\""がお勧めです。

例えば、write-host "a""b";というスクリプトは、

PowerShell "write-host \""a\""\""b\"";"

PowerShell "write-host """"a""""""b"""";"

のように書けます。

« PowerShell.exe -command "スクリプト" で引用符をエスケープする。 | トップページ | .NETなどのコマンドラインの引数で引用符をエスケープする。 »