2014年06月27日

CMD /C PATH の PATHに特殊文字が入っていた場合のエスケープの仕方について

Windows PCの
CドライブのTESTフォルダーに
Callee & test.cmd
というひとつの名のファイル(スペースも&もファイル名の一部)があったとする

コマンドプロンプトから呼び出すことを考える。
CMD /C C:\Callee & test.cmd
だ。

しかしこれはうまくいかないことはすぐにわかる。スペースが混じっているからダブルクオートしなければね。

そうしてこうする、実行する。
Cmd /c "C:\TEST\Callee & test.cmd"
'C:\TEST\Callee' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
'test.cmd' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

なぜ(?!)か、& の前後でコマンドが分割されているようだ。

仕事中に、ここからひたすら調査を始めたが、結局帰宅して今調べてようやく結論が出た。
答えはこうです:
Cmd /c C:\TEST\"Callee & test.cmd"
要は特殊文字を含むファイル名(フォルダ名)の単位で両端にダブルクオートをつけてやるということ。

ここにいたるまでに試したことといえば
・パスの両側にダブルクオート
・&の左側に ^
・パスの両側に\^"
・ファイル名のスペースごとにダブルクオート
 つまり Callee" "&" "test.cmd こんな感じの。
など。

もしもファイル名以外に、フォルダー名にも同様のことがあれば
Cmd /c C:\"TEST & TEST"\"Callee & test.cmd"
です。

例に出したPathであればこれで大丈夫。
ただ、これでも完全ではないと思う。あらゆるパスについて問題が出ないような、完璧なエスケープルールでは、まだない。

今日はここまで。

20140630_213029 追記
実は、上記のコマンドラインはうまくいかないことがある。
以下のやり方でより、失敗しにくくなる。

CMD.exe ^"/C C:\"TEST & TEST"\"Callee & test.cmd"^"

つまり、パスだけではなく /C も含めて ^" で囲うような文字列加工をするのです。

@2014/06/27 23:50 | Comment(0) | TrackBack(0) | 日記

(アルファー版だけど)7-zip 9.34 出てたー〜

7-Zip

ページの右側、上のリンクを見ると、そこにある。

7-Zip 9.34 alpha 2014-06-22



Oracle SQL Developer 4.0.2 (4.0.2.15.21) も 5月5日に出てた。
Oracle SQL Developer ダウンロード
これ、意外と(旧バージョン4に比べて)起動後の動作がスムーズ。


@2014/06/27 00:44 | Comment(0) | TrackBack(0) | 日記

・おすすめ楽天ショップ1:trendyimpact楽天市場店
・おすすめサプリショップ:iHerb.com
・おすすめ楽天ショップ2:上海問屋
Powered by さくらのブログ