はじめに
データのバックアップってとても大切ですよね。しかし同じファイルを何度も取るって結構無駄になるんですよね。
例えば、毎日バックアップする場合、タスクで自動でプログラムを動かしますが、同じファイルが何個も出来てしまう訳です。そしてバックアップフォルダが無駄に増えてしまいます。
それで今回、フォルダのチェックサムを取り、変化がないかを確認するプログラムを組んでみたいと思います。
今回は、かなりマニアックな話になので、興味ある人だけ見てくださいね。
簡単な仕組みの説明
チェックサムって普通ファイルに取るものですよね。ではどうやってそれを取るのでしょうか?
簡単に言うと、フォルダの内容(ファイル名・更新日・ファイルサイズなど)をテキストに全て吐き出して、そのファイルのチェックサムを取るという方法です。
それで本当に大丈夫と言われると、100%とは言えませんが、普通はこれで変更チェックが出来るかと思いますし、かなり高速でチェック出来るのがポイントです。
プログラムを公開
下記のようなBATだけで実現できてしまいます。
@echo off
set directory=%2
dir /s "%directory%" | find /v "空き領域" >"%temp%\filelist"
del/q .\CSTmp\%1
certutil -hashfile %temp%\filelist MD5 | FIND /V ":" >> .\CSTmp\%1
del/q "%temp%\filelist"
使い方は、このBATに以下の引数を設定します。
引数 | 説明 |
---|---|
引数1 | チェックしたいフォルダ |
引数2 | チェックサムの結果出力ファイル名 |
ではプログラムの説明をしてみましょう。
【3行目】
「dir /s」の結果をテキストに出力します。ポイントは最後の1行の「空き容量・・・」の行を削除して出力する必要があります。そうしないとHDDの容量の変化の度に最後の数値が変わるため、対象のフォルダに変換がなくても、チェックサムの値が変わってしまいます。
【5行目】
実際のチェックサムの算出はWindows標準の「certutil」コマンドを利用します。
こちらも無駄な情報が出ないように、不要な行は削除しています。
まとめ
いかがだったでしょうか?これをうまく使えば、無駄なバックアップは取る必要ありません。前回のチェックサムと、新たに作成したチェックサムを比較すれば、ファイルが編集されたか高速にチェック出来るって訳です。もし良かったら使ってみてくださいね。
コメント