あるサービスにログインするコマンドをバッチファイルに書いているユースケースがある。

コマンドは、ユーザーID・パスワードを指定してバッチファイルをたたくとそれだけでサービスを利用できる状態になる。
 

ここで指定するパスワードなのだが最近のパスワードは記号も使えることが多い。
パスワードはできる限り推測が難しいほうがいいため、%を含むパスワードに変更した。

するとどうだ。

今まで使えていたバッチファイルが突然動かなくなったのだ。

コンソールを確認すると、バッチファイルでは指定している % が入力されていない。

 

原因はこうだ。

バッチでは % は特殊な意味を持っている。

 
echo %OS%
Windows_NT

 

これは変数と呼ばれるもので、上記であれば "OS" という名前の変数のなかに、"Windows_NT"という文字列が代入されているのだ。変数にアクセスするには、'%' と '%' で変数名を囲む必要がある。 

したがって '%' はコマンドの世界において特殊な意味をもっており、文字として扱うことができない。

 

では、もう%を使わないようにするしかないのか?

 

実は回避する方法があって、所謂エスケープするのだ。

 

では、そのコマンドラインで、% をエスケープする方法だが
バッチファイルに、%を、%% と二つ並べて記述する。

そうするとエスケープされ % として入力できるのだ。

echo -p password%
-p password%