特定の名前が付くファイルだけ、一括でなにかしたい!
なんてときはありませんか?
今回は、そんなファイルの一括処理を行うバッチファイルの作り方をご紹介します!
どんなことができるの?
今回紹介するサンプルは、mp3ファイルを「iTunesに自動的に追加」フォルダに一括移動させるバッチファイルです。
で、個人的な考えで、WAVファイルとmp3ファイルを両方とも作って保存しているんですね。
このWAVファイルとmp3ファイルを、別々のフォルダに管理しているのですが、最近めんどくさくてmp3をiTunesに自動で振り分けさせていたのです。
でも手でこんなことすると面倒ですよね?
そこでバッチファイルに一括処理してもらう訳です。
ソースコード
ということで、ソースはこちら。
REM*2に「#」を付けているのは個人的に見やすいと信じ込んでいるからというだけなので、気にしないでください(笑)
@echo off REM # 実行コマンド(WIN版) set DEST="D:\music\iTunesに自動的に追加" REM # ファイルをリストアップ dir *.mp3 /s /b > list.txt REM # list.txtが作られていない場合、エラーを吐いて処理終了 if not exist list.txt ( echo list.txt File NOT EXIST pause goto Exit ) REM # ファイルを1行ずつ処理 for /f "delims=" %%a in (list.txt) do ( REM # mp3ファイルを既定のパスに移動 move "%%a" %DEST% ) :Exit REM # リストアップファイルを削除 del list.txt
解説
このソースについて、解説していこうと思います。
パスを変数にセット
バッチファイル(DOS)では、変数は環境変数を使用します。
その為に行うのが「setコマンド」です。
REM # 実行コマンド(WIN版) set DEST="D:\music\iTunesに自動的に追加"
今回は「DEST」という環境変数を作成し、その値を移動先のパスに設定しています。
ちなみに、コマンドプロンプト上で、上記のような環境変数の作成を行うと、そのコマンドプロンプト上でのみ有効な変数となるので、「変な値が残っちゃうんじゃないか」とか気にしなくてOKです。
ファイルのリストアップ
次にmp3ファイルのリストアップです。
REM # ファイルをリストアップ dir *.mp3 /s /b > list.txt
おなじみ(?)「dirコマンド」ですね。
dirコマンドはオプション付きで指定します。
- *.mp3:拡張子がmp3のものすべて
- /s:サブフォルダも含めて検索する
- /b:ファイル名のみ表示
ちなみに/sと/bを併用すると、ファイル名がフルパスで表示されます。
(重複ファイル名があったらと思うと当たり前なことなんですが)
また「> list.txt」で結果を「list.txt」という名前でファイル出力します。
リストが作られていなかったら終了
基本的に発生しないと思うんですが、入れるだけ入れてみたり。
REM # list.txtが作られていない場合、エラーを吐いて処理終了 if not exist list.txt ( echo list.txt File NOT EXIST pause goto Exit )
もしない場合、「list.txt File NOT EXIST」と表示し、キーを叩かれたら終了します。
「gotoコマンド」は、gotoの後に書かれた「ラベル」にジャンプするコマンドです。
そのラベル「Exit」というのが、ソースの最後の方にあるこれです。
:Exit
goto Exitに来ると、この:Exitの箇所から処理を行う。といった感じです。
その間にある処理はスキップされます。
リストアップした
ここがこのバッチファイルのキモ部分ですね。
REM # ファイルを1行ずつ処理 for /f "delims=" %%a in (list.txt) do ( REM # mp3ファイルを既定のパスに移動 move "%%a" %DEST% )
「forコマンド」で、list.txtを1行ずつ処理しています。
1行分の内容は、「%%a」という変数にセットされます。
この%%aと、最初に設定したDEST変数を使って、「moveコマンド」でファイルを移動させます。
ちなみに変数は、setコマンドの時は「DEST」のように名前だけ書きますが、使う時は「%DEST%」のようにしいて使います。
これで%%a(mp3ファイルのフルパス)から、%DEST%(iTunesに自動的に追加)に移動します。
リストアップしたファイルを削除
最後に作成したlist.txtを削除します。
ちなみにエラーした場合も、gotoによってこの処理は実行されます。
(まぁ「ファイルがない場合」というエラーなので、仮にそうなってもこのコマンドの意味はないんですが)
REM # リストアップファイルを削除 del list.txt
あとがき
いかがでしたでしょうか?
コレを応用して、ファイルの一括処理で楽チンしましょう!