やりたいこと検索

複数のフォルダからファイルを集め日付を付けて保存する

 

こんなことを知りたい人へ向けて書いています

  • Windowsバッチファイルを使って特定のファイルを集め、保存しておきたい方
  • 何のファイルがどこに入っているか分からなくなったので、ある条件のファイルを一括で集めたい方
  • 日付をファイル名の前に付けて保存し管理したい方

 

目次

 

コピペで使える特定ファイル収集バッチファイルコード

ここでは、「複数のフォルダ内にある、条件に一致した特定のファイルだけを集めてきて、それらのファイル名の先頭に日付を追加する」というバッチファイルコードを紹介します

このようなバッチファイルは、重要なファイルだけを一つのフォルダに集め保管するときに使えます。また、ファイル名を一目見れば日付が分かるようになるので、いつ作られたファイルなのかを簡単に認識できるようになりますので、ファイルの時系列的な管理にも有用です。

例えば、以下のようなフォルダ構成を考えてみましょう。

  フォルダ1
    ∟ファイル1.txt
    ∟ファイル1.dat
  フォルダ2
    ∟ファイル2.txt
    ∟ファイル2.dat
  フォルダ3
    ∟ファイル3.txt
    ∟ファイル3.dat

フォルダ1~フォルダ3の三つのフォルダが存在します。さらにその中にtxtファイルとdatファイルの二種類のファイルが一つずつ存在します。

この中から、txtファイルだけを「保管」というフォルダに集めたとします。また、集めるときにはそれらのファイル名の先頭に集めた今日の日付の付け加えることにしましょう。

このようなバッチファイル「bring_and_adddate.bat」のプログラムコードは以下のようになります。コピペして適当なバッチファイルに張り付ければ使えます。

このバッチファイルを作成した場所にあるフォルダ内のすべてのtxtファイルを「保管」フォルダに集め、ファイル名の先頭に現在日付を付け加えます。

初めの4行目から6行目は今日の年月日をそれぞれ変数「year」、「month」、「day」に代入している部分です。そして、9行目でそれらを合成し「YYYYMMDD(例:20170930)」の形式にして、変数「date2」へ代入しています。この辺りは、「日付フォーマットを「YYYYMMDD」へ変更する(例:2017/06/28 → 20170628) -やりたいことから検索-」が詳しいので参考にして下さい。

12行目では、すべてのtxtファイルを探し出し、「file.list」ファイルへ書き込んでいます。これは、このバッチファイルが置いてあるフォルダ内だけでなく、そのフォルダにあるフォルダ内も、さらにそのまたフォルダ内もすべてのフォルダから探し出します。これは、「dir」コマンドに「/s」オプションを付けているからですが、詳しくは「dir(フォルダとファイルの一覧を表示) -コマンド別解説-」を参照して下さい。

18行目の「for」ループは「file.list」に書き込んだファイルに対してループを回しています。ファイル名が「%%a」に入ってループが回りますが、この時点ではファイルのフルパスが入っている状態です。

ですので、21行目の「%%~nxa」で「%%a」のフルパスからファイル名と拡張子だけを取り出しているのです。これらについては、「パス名の文字列を自在に切り取る -やりたいことから検索-」が詳しいです。

そして、24行目で「copy」コマンドにより、対称ファイルを「保管」フォルダに保存します。このとき、保存先の名前に変数「date2」を使って、現在日付を付加していることに注目です。

一応最後の行で、「file.list」ファイルを削除しています。

以下は、実行後の「保管」フォルダの中身です。

 

自分の目的に応じて編集する

ここでは、上記で示したバッチファイルのコードを自分なりに編集するためのヒントを紹介します。

バッチファイルのコードをもう一度示します。全く同じものです。

保存対象ファイルを変更する

前節で示した実行後のフォルダの中身から分かるように、フォルダ1~フォルダ3にはtxtファイルの他にdatファイルも存在しましたが、txtファイルだけが集められています。これは、プログラムの12行目で「*.txt」と指定しているからです。

例えば、txtファイルではなくdatファイルのみを集めたい場合には、この部分を「*.dat」に変更すれば、datファイルだけが収集できますし、「第1回_*.doc」などとすれば、ファイル名が「第1回_」から始まるワードファイル(docファイル)のみを集めることができます。

また、全てのファイルを集めたい場合は、「*.*」や「*」と指定すればよいでしょう。この部分を自分の集めたいファイルに合わせて編集しましょう。

コピーではなく、移動させたい

このバッチファイルでは、コピーをして保存しているので、元のファイルにファイルは残ります。しかし、コピーではなく移動して、元のファイルが残らないようにしたい場合は、24行目の「copy」コマンドを「move」コマンドに置き換えればよいでしょう。

また、コピー先や移動先のフォルダを変更したい場合はそのパスを編集すればオッケーです。

日付の付ける位置や日付の書式を変更したい

いま日付を付ける位置はファイル名の先頭です。日付を拡張に設定したい場合は、21行目の「%%~nxa」を「%%~na」と変更し、24行目の「%date2%」の位置を「.\保管\!filename!_%date2%」とします。これで、「ファイル1.20170930」のような形式となります。

「%%~nxa」の「x」は拡張子を表示するためのもので、この「x」を省略すると拡張子なしの形式になるのです。

また、現在日付を「YYYYMMDD」から「MMDD」としたい場合は、9行目の「%year%%month%%day%」を「%month%%day%」とすればよいでしょう。

 

これらのように、自分好みの動作をするよう編集してご使用下さい。何か不明な点や実現したい機能がどうやればできるのか分からない場合はお気軽に「お問い合わせ」からご連絡下さい。

Windowsバッチファイル初心者へ向けた入門書を作成しました


Windowsバッチファイル初心者の方へ向けた入門書(PDF)を作成しました。


・初めてWindowsバッチファイルを勉強してみようと思っている方

・使ったことはあるが一から基礎を学び直したい方


へ向けて丁寧な解説を行っています。


「全くプログラムを知らない方でも、この入門書を読んだ後には、Windowsバッチファイルの中級者レベルになれるように」をコンセプトに執筆したものです。


この本を読めば、バッチファイルを使ったファイルやフォルダの操作に関しては一通りのことができるようになります。そうなればもう十分中級者と呼べるレベルですので、あとは自分のやりたいことを実現しようとする中で徐々に知識を蓄えていくだけですぐに上級者へなれるでしょう。


詳しくみる

関連ページ

コメントを残す