コマンドプロンプトで & をエスケープして渡す

コマンドプロンプトstartコマンドを使ってURLを開くとき & が邪魔になる。
例えばこんな感じ。

C:\> start http://www.google.co.jp/?q=hello+world&gws_rd=ssl
'gws_rd' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

& ってのは特殊な文字で、複数のコマンドを順次実行していくときに使う。
例えば dir 連続して2つ実行するには、こんな感じ。

C:\> dir & dir

もうちょっとまともな例を挙げると、こうかな。

C:\> copy masterup\*.iso e:\usb\factory & msg * "\(^o^)/オワタ"

普通なら " で囲えば無効化できるのだが、

C:\> notepad "abc&def.txt"

どうもstartやechoなどの内部コマンドでは、これが使えない様子。

C:\> echo "hello&world"
"hello&world"

こういう場合は ^ を使ってエスケープすれば通る。

C:\> echo hello^&world
hello&world

前述のURLをstartを使って開くのも同様に &^& にすれば大丈夫。

ダメ C:\> start http://www.google.co.jp/?q=hello+world&gws_rd=ssl
↓
通る C:\> start http://www.google.co.jp/?q=hello+world^&gws_rd=ssl

コマンドプロンプトは、ここらへんの処理があまり洗練されていないので困る。