.NETなどのコマンドラインの引数で引用符をエスケープする。(その2)
RunAsコマンドは、.NETではありませんが、RunAs.exeをメモ帳で開くと、CommandLineToArgvWという文字列が見えます。なので標準シンタクスです。
例えば、notepad "a b"なら、
RunAs ... "notepad \"a b\""
か、
RunAs ... "notepad """a b""""
と書けますが、notepad "a < b"ならどうするか?
cmd.exeの遅延展開を使っても、cmd.exeの制御文字をエスケープできます。
set "x=RunAs ... ""notepad \""a < b\"""""
if !errorlevel! == %errorlevel% (!x:""^=^"!) else cmd /v:on /c !x:""^^="!
set "x=コマンドライン"の中の"を2倍個します。外側の"で制御文字は無効です。
遅延展開で、""を半減して実行します。遅延展開後の制御文字は無効です。
遅延展開が有効なら、その場で実行し、無効ならサブシェルで有効にして実行します。


最近のコメント