「バッチファイルの限界」

注意:この記事の内容は WindowXP で検証しました。他のバージョンでは違う結果になるかもしれません。

バッチファイルというのは結局のところ、cmd に文字列を渡しているだけです。C言語のソースに全角空白が入っているとエラーになるように、バッチファイルにもいくつか制限があり、しかも「仕様である」という以外のいかなる理由もないため利用者を悩ませます。

ファイル名に半角の空白を含むファイル

一つ前の日記でcmd /c, とカンマが入っているのは、ファイル名に空白を含むファイルをD&Dしたとき用です。カンマがないとコマンドラインから呼んだときは上手くいくのに、D&Dしたときだけ失敗します。

カンマの代わりにセミコロンでもよく、この二つは引数の区切りに使うので、なにかしら半角空白の処理に関する仕様がありそうです。

ファイル名に半角のアンパサンド(&)を含むファイル

アンパサンドは二つ以上のコマンドを結合する時に使います。なのでファイル名にアンパサンドが含まれると、一つのファイル名が、二つのものを結合したとみなされて めちゃくちゃになるようです。

同様に『(』や『)』や『&』や『@』や『^』を含むんでいると駄目です。回避する方法はありますが、とても面倒くさいようです。ファイル名に使えない文字を覚えておきましょう。

cmd.exe に渡せる引数の長さに制限がある

Windows XP 以降では 8191 文字。Windows 2000 または Windows NT 4.0 では 2047 文字が限界です。なので、ドラッグアンドドロップで渡せるファイルの数には限界があります。

参考:コマンド プロンプト (Cmd.exe) のコマンド ライン文字列の制限