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