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

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

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

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で完結してなんとかしたいなぁ