読者です 読者をやめる 読者になる 読者になる

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

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

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

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

C:\> dir & dir

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

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

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

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

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

C:\> echo abc^&def
abc&def

前述の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

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