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

2010年1月 5日 (火)

.NETなどのコマンドラインの引数で引用符をエスケープする。

.NETのエスケープ法は、\"(\と1個の")または"""(3個の")ですが、cmd.exeのエスケープ法は""(偶数個の")なので、合いません。

そこで、.NETとcmd.exeの両方でエスケープする方法ですが、これは、PowerShell.exeのように簡単には行きません。

しかし、PowerShell.exeを使えば、なんとか可能です。

PowerShell ".\ファイル '引数...';"

ここで、'引数...'内の、

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

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

\"によるエスケープはC以来の伝統。"""によるエスケープはundocumented。

このエスケープ法は共に、.NETというより、Win32APIのCommandLineToArgvW()の仕様です。つまり、MSの標準シンタクスです。

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