「バッチファイルの基本」

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

ちょっとだけ勉強したので、まとめておきます。

バッチファイルとは複数の命令を一気に実行するプログラム。実体はテキストファイルで簡単に編集できます。実行すると中に書かれた命令が一行ずつ実行され、対応する結果が表示されます。ただ、行数が増えるといちいち命令を表示しなくていいよ! という気分になります。

そこで文頭に @ を付けると、その行はコマンドプロンプトに表示されずに、こっそり実行されます。もちろん(あれば)結果は表示されます。一行だけ echo off するって訳です。たとえば echo off は次の行から全て非表示にするという命令ですが、これそのものは表示されてしまいます。それすら嫌だという場合は、ファイルの先頭に @echo off と書いておけばOK。

サンプル:echoと@のテスト.bat

PAUSE

この命令を書いておけば、処理が一時停止(ポーズ)します。なにかキーを押せば再開。.bat のバッチファイルをダブルクリックで実行するとすぐにウィンドウが閉じてしまいますが、ファイルの最後に PAUSE を書いておけば、なにが起きたかをじっくり観察できます。(コマンドプロンプトから実行すれば関係ない話ですが)

バッチパラメータ

バッチファイル中で使える変数(パラメータ)があります。バッチファイル自身のパスは %0 と書けばいいし、バッチファイルにD&Dされたファイルや、引数として与えられた項目については %1 でもってアクセスできます。使えるのは %1 から %9 まで。それより大きなパラメータにアクセスしたい場合は、後で説明する SHIFT を使う必要があります。

また、全ての引数を他へと渡したいときなどには %* を使えます。

参考コマンドプロンプトを使ってみよう! −バッチファイルとは?−

バッチパラメータの修飾子

パッチパラメータには以下の修飾子が使えます。ちなみに、%0 と書くと、引用符 ”” が付きますが、以下の修飾子を付けたときは引用符が付きません。

%~f0 フルパス C:\test\aaa.bat
%~d0 ドライブ名 C:
%~p0 親フォルダのパス \test\
%~n0 ファイル名 aaa.bat
%~x0 拡張子 .bat
%~a0 ファイル属性 --a------
%~t0 ファイルの日付・時刻 2009/11/23 23:51
%~z0 ファイルのサイズ 112

%~nx0 という感じで組み合わせれば、ファイル名+拡張子なんてのも取得できます。例はバッチファイル自身のパスですが、もちろん他の引数でも使えます。

サンプル:バッチパラメータの修飾子.bat

SHIFT

バッチパラメータの指す対象を1ずらします。たとえば、一度だけ SHIFT したなら、%0%1 を意味するように変わります。

たとえるなら、「【1番】の人は返事して」という命令は何度繰り返しても【1番】の人にしか届きませんが、SHIFT を挟むと、同じ命令でも【2番】の人にも届くようになるのですね。

  • 「【1番】の人は返事して」 「はい、1番です!」
  • SHIFT! 【1番】の人は返事して」 「へい、2番っす」
  • SHIFT! 【1番】の人は返事して」 「はーい、3番でーす」

そんなわけで、サンプルファイルのようにループを作って何度も SIFHT すれば、同じ処理を複数のファイルに加えられます。

サンプル:D&Dされたファイルを表示する.bat

なお、SHIFT /1 のように書けば、n番目以降のバッチパラメータだけをシフトすることも可能です。