第7回 forコマンド(その1):Windows 2000 活用講座 Windows 2000 コマンドライン徹底活用(3/3 ページ)
GUIだけでは面倒な定型処理やシステムのメンテナンスも、コマンドラインを使えば効率よく作業できる。
このforステートメントを応用すると、一定のパターンを満たすファイル名を変更するなどといった作業が行える。例えば、“PP”で始まるJPEGファイルをXXX-PP*-YYY.JPGといったパターンに変更する場合、
for %%V in ( PP*.JPG ) do ren %V XXX-%~nV-YYY%~xV
とすればよい。ren(rename)コマンドでもファイル名の一括変換は可能だが、このようなファイル名の長さが変わるような名前変更は不可能である。renコマンドで可能なのは、例えばXX*.JPGをYY*.JPGにすることは可能だが(“*”の部分にマッチする名前の長さや位置は変更の前後で変えることはできない)、より複雑なパターンの名前変更を行うには、上のようなforステートメントや、より高度な変数の編集・置換機能(今後解説する予定)が必要となる。
なお、ここで注意すべき点は、セット部分には、対象となるパターンだけを確実に指定しておかないと、forステートメントが誤動作する可能性があるということだ(バグなのか仕様なのかはやや怪しいが)。
例えば上記のステートメントを
for %%V in ( *.JPG ) do ren %%V XXX-%%~nV-YYY%%~xV
として実行すると(forコマンドのセットには“*.JPG”と指定していることに注意)、最初の1つのファイルだけは、2回renコマンドが適用されてしまう。具体的には、以下のスクリプトを実行する。
@echo off
dir
echo ---------------Execute CMD--------------------
for %%V in ( *.JPG ) do ren %%V XXX-%%~nV-YYY%%~xV
dir
その結果は以下のように、「PP0001.JPG」が2回名前変更されてしまって、結果がおかしくなっている。renコマンドによる変更後のファイルも、forコマンドのセットにマッチしてしまったのがそもそもの原因のようである。
C:\cmd\forcommand\testdir\t2>..\testrename.cmd
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は A024-5237 です
C:\cmd\forcommand\testdir\t2 のディレクトリ
2001/04/23 14:18 <DIR> .
2001/04/23 14:18 <DIR> ..
2001/04/23 13:57 0 PP0001.JPG
2001/04/23 13:57 0 PP0002.JPG
2001/04/23 13:57 0 PP0003.JPG
2001/04/23 13:57 0 PP0004.JPG
4 個のファイル 0 バイト
2 個のディレクトリ 21,792,612,352 バイトの空き領域
---------------Execute CMD--------------------
ドライブ C のボリューム ラベルがありません。
ボリューム シリアル番号は A024-5237 です
C:\cmd\forcommand\testdir\t2 のディレクトリ
2001/04/23 14:18 <DIR> .
2001/04/23 14:18 <DIR> ..
2001/04/23 13:57 0 XXX-PP0002-YYY.JPG
2001/04/23 13:57 0 XXX-PP0003-YYY.JPG
2001/04/23 13:57 0 XXX-PP0004-YYY.JPG
2001/04/23 13:57 0 XXX-XXX-PP0001-YYY-YYY.JPG
4 個のファイル 0 バイト
2 個のディレクトリ 21,792,612,352 バイトの空き領域
実際筆者は他の条件下で、セットに“*.*”を指定したときに、無限ループに陥ったこともあった。このためセットを指定する場合には、確実に「処理対象となるファイルだけ(処理前のファイルにのみ一致するようなパターン)」を指定するようにするべきだろう。
さて、次回は、拡張されたforステートメント自体の機能について解説を行う。
今回のまとめ
- forステートメントの基本形は「for %%変数 in (セット) do コマンド」。「(セット)」には任意の文字列が指定できるが、ワイルドカード(“*”や“?”)を含むファイル名を記述すると、マッチするファイルが順次セットされて、「コマンド」が実行される。
- for変数を参照するには、スクリプト・ファイル中では“%%V”、直接インタラクティブに入力する場合には“%V”とする。
- 変数参照に修飾子を付ける(“%%~オプション 変数名”とする)ことにより、値からパス名を取り出すなどのさまざまな操作を行うことができる。
Copyright© Digital Advantage Corp. All Rights Reserved.