おやつはさっき食べたでしょ

書き留めないと忘れちゃう。

BATファイルの引数指定で、MSの罠にハマった話

BATに複数のファイルをD&Dすると、BATには %1、%2....という変数で渡される。
引数指定してBATを起動したときと一緒の動作。
>hoge.bat aaa1 bbb2 ccc3 として hoge を起動すると、内部では、%1=aaa1、%2=bbb2、%3=ccc3 になるアレ。

でも、でも・・・・・ D&Dでドロップしたファイル名に全角スペースが使われてると引数がバグる。

 具体的にはこんな感じの謎仕様。

 D&Dしたファイル名  変数%1   変数%2   説明
 aaa1          aaa1            ふつー
 aa a1  " aa a1"    半角スペース入りファイル名。
 ダブルクォーテーションで括って渡される。まあ許す。
 aa a1  aa  a1

 全角スペース入りファイル名。 全角スペースで分割され
 別々の変数に泣き別れ。へ? 括ってよ・・

 a a a1  "a a a1"    半角、全角スペース両方入りファイル名。
 あ、これなら括ってくれるのね・・

全角スペース以外にも、エクスクラメーションとか入ると同じことに。

全角差別だよね、半角スペース優遇されてるよね? (まぁ、もともと引数のデリミタだしね・・)

そんで、ファイルの保存されたフォルダに半角スペースが入っていれば、ファイル名に全角スペースしか入っていなくても、ダブルクォーテーションで括ってくれるから安心。
c:\damm y\aa a1  →  %1="c:\damm y\aa a1" になる、みたいな。
おい、半角優遇されてんな!

とか思ってたら、引数渡しとD&Dの両方に対応するBATの作成中、「ファイル名だけ」切り出そうとして色々不具合が起きた。

この謎仕様にハマって半日試行錯誤。
もーやだー(´・ω・`) 

とりあえず、BATで処理することは諦めて、ファイル名だけVBで処理したん・・・

したけど、超負けた気分。

BATで完結してなんとかしたいなぁ