« .NETなどのコマンドラインの引数で引用符をエスケープする。 | トップページ | 遅延展開が有効か無効か?を判定する。 »

2010年1月 6日 (水)

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

RunAsコマンドは、.NETではありませんが、RunAs.exeをメモ帳で開くと、CommandLineToArgvWという文字列が見えます。なので標準シンタクスです。

例えば、cmd /k title "a b"なら、

RunAs ... "cmd /k title \"a b\""

か、

RunAs ... "cmd /k title """a b""""

と書けますが、cmd /k title "a < b"ならどうするか?

cmd.exeの遅延展開を使っても、cmd.exeの制御文字をエスケープできます。

set "x=RunAs ... ""cmd /k title \""a < b\"""""
if !errorlevel! == %errorlevel% (!x:""^=^"!) else cmd /v:on /c !x:""^^="!

set "x=コマンドライン"の中の"を2倍個します。外側の"で制御文字は無効です。
遅延展開で、""を半減して実行します。遅延展開後の制御文字は無効です。
遅延展開が有効なら、その場で実行し、無効ならサブシェルで有効にして実行します。

« .NETなどのコマンドラインの引数で引用符をエスケープする。 | トップページ | 遅延展開が有効か無効か?を判定する。 »