2009年2月4日水曜日

CMD.EXE に URL を渡す場合の注意

すこしはまったので、書いておく。

 openURL.cmd などという感じでURLを元にブラウザを開くスクリプトを書いた場合に、渡すパラメータの文字には、CMDとしての制限が存在する。
 Unix系だと、shやcshに渡す場合に 「*」や「$」や「&」がShellに解釈されてしまってそのままの文字としては渡されないのと同じである。
 実は、CMDの場合も同様であり、以下のものは解釈されてしまう。
「% ^ " < > & | ( ) = ; ,」などが特殊な意味をもつものであり、特に「& && || | 」は、クォートされていない場合は、文区切りを意味してしまう。たとえば、以下の例だと、

openURL.cmd http://x.y.z/s?a=b&c=d

「&」の前までと後ろが別の文とみなされるため、CMD.EXEでは以下のような実行をする。

openURL.cmd http://x.y.z/s?a=b
c=d

もちろん、2行目はエラーとなる。クォートすればOKであり、きちんとURLを認識する。

openURL.cmd "http://x.y.z/s?a=b&c=d"


問題はクォートしてもだめな文字が入った場合であり、代表格は「%」であるが、これは「%%」となり、他の多くの特殊文字のエスケープである「^」ではないところが注意点である。

参照:CMD.EXE TIPs

0 件のコメント: