「and の使い方が間違っています」というエラー

アクセスログを見ていたらこんな検索ワードで飛んできた人がいました。



「andの使い方が間違っています」というのはWidows 2000とWindows XPでバッチファイルを実行した時によく出るエラーです。
実際にエラーの出たバッチファイルを見てみても「and」という単語はたぶん見つからないはずなので、「じゃあいったい何が原因なんだろう...」と頭を悩ませることになることが多いと思います。


とりあえず答えを書くと、このエラーはデスクトップなど、ユーザのプロファイル以下にバッチファイルを配置して実行していることに起因して発生するエラーであり、エラーに出ている「and」というのはWindows 2000Windows XPでデフォルトのユーザプロファイルフォルダになっている「C:\Documents and Settings」というフォルダの一部です。


例えば。
バッチファイルにはさまざまなパラメータを利用することが出来ます。例を挙げると %~dp0 と書くと、バッチファイルのあるフォルダの絶対パスを表します。詳しくはコマンドプロンプトCALL /? と打っていただくと出てきますが、起動時のコマンドの一番最初(つまり呼び出しているバッチファイルの絶対パス)を表す %0 という変数に ~dp という文字列を加えることでこの変数をドライブ+パス名だけに展開することが出来ます。


上記のような方法で「バッチファイルの絶対パス」を取得して利用しようとした場合、ただしく引用句(ダブルクォーテーション)を付けたり削除したりと気を遣わないといけないケースがあります。それは「バッチファイルが空白を含むパスに配置されているケース」です。
空白を含むパスを引用句なしでそのままコマンドに渡してしまうと、パスが分割されて実行コマンドに渡されてしまい個別に実行されてしまいます。


そんなわけで対処方法は大きく2つ。

    1. 引用句を付けるなどしてバッチファイルを直す
    2. C:\temp とか空白を含まないパス配下にバッチファイルを置いて実行する


自分で作って配布しているものであれば1番の対応が好ましいですが、とりあえず動かしたいのであれば2番の対応で十分だと思います。


こんなしょうもないエラーの出るバッチファイルを書いてしまうことはとても恥ずかしいことなので作って配布する場合には要注意です。