入門講義15.ファイルを複数のフォルダに分類する

BASH,bat,バッチ

最後の講義となります。長くお疲れさまでした。

最後の内容は複数のファイルをフォルダに分類する方法を解説します。

この記事が参考になる方

  • 複数のファイルを特定のフォルダに分類したい方

前提.フォルダ構成とファイル一覧

作成がめんどくさい人は下記のコマンドを使って、作成してみてください。

md collect
type nul >>memo_1.txt
type nul >>memo_2.txt
type nul >>memo_3.txt
type nul >>memo_4.txt
type nul >>memo_5.txt
type nul >>sinai_1.txt
type nul >>sinai_2.txt
type nul >>sinai_3.txt
type nul >>sinai_4.txt
type nul >>sinai_5.txt

ちなみに同じ文字がいくつかありますので、forコマンドを使って省略することも可能です。こちらの記事で解説していますので、参考にしてみてください。

ステップ1.特定のファイル名を取得する

ファイルの名前を取得するにはdirコマンドを使用します。

試しに前節のフォルダでdirコマンドを使用します。

結果がこちら。

日付とファイル名の一覧と他の内容も記載しています。

これではあまり使えないので、オプションを使います。

オプション/bは余計な部分を取り除き、ファイル名のみ抽出します。

コマンドの結果はこちら。

dir /b

余談ですが、サブフォルダの中身まで読み取りたい場合は、オプション/sを付け足します。

結果はこちら。

dir /b /s

「memo」という名前のファイルのみ抽出したいときは下記のとおりあいまい検索「*」を利用します。

dir /b /s memo_*.txt

ご覧のとおり、「memo」のファイル名のみ抽出されました。

もし、特定のファイル1つを抽出したい場合、ファイルの名前を1文字も間違えずに記載すれば大丈夫です。

dir /b /s memo_1.txt

ステップ2:特定のファイルをファルダに集める

さてさて、最後に特定のファイルをフォルダに集めます。

今回は「memo」のついたファイル名を「collect」フォルダに集めます。

コードはこちら。

@echo off
for /f %%A in ('dir /b /s memo_*.txt') do (
  copy "%%A" collect
)

内容の解説は後述します。実際にバッチファイルを起動させて集めましょう。

コピーを行うファイル一覧
batファイル起動前の集めるフォルダの中身

このように特定のファイルをフォルダに集めることができました。

内容は以下のように分解して解説します。

  1. for /f 
  2. %%A in
  3.  (‘dir /b /s memo_*.txt’)
  4.  do (
  5. copy “%%A” collect

forは繰り返しの機能です。/fオプションは1行ずつ読み取る機能を付け足します。

つまり、1行ずつ読み取り、作業を繰り返します。

%%A inはinの後の内容を変数Aに入れます。

変数Aの内容が(‘dir /b /s memo_*.txt’)となります。

dirコマンドは前節で詳しく解説してますので、詳しくは省きます。1列ずつファイルが記載されていますので、for /fコマンドによって繰り返し処理されます。

do(は()内の処理がされます。

この()の内容がcopy “%%A” collectとなります。変数Aをcollectフォルダにコピーするというコードになります。変数Aには、dirコマンドによって抽出されています。

つまり、dirコマンドで集めたいファイルを絞り、forコマンドでよって繰り返しコピーしてファイルを集めます。

まとめ

下記の3つのコマンドを組み合わせることで特定のファイルを集めることが可能です。

  1. dirコマンドで特定のファイルを取得する
  2. forコマンドで繰り返し作業を行う
  3. copyコマンドでファイルをコピーする

以上で入門講義15を終わります。

全15回の講義がすべて終えた読者はバッチファイルが日常で使えるようになったのではないのでしょうか。

日常業務が少しでも楽になり、充実した日々を過ごせるようになるような記事、バッチファイルについての記事を発信していきます。

最後まで講義を読んでいただきありがとうございました。

コメント

タイトルとURLをコピーしました