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