Windowsでフォルダのチェックサムを取る方法

はじめに

データのバックアップってとても大切ですよね。しかし同じファイルを何度も取るって結構無駄になるんですよね。
例えば、毎日バックアップする場合、タスクで自動でプログラムを動かしますが、同じファイルが何個も出来てしまう訳です。そしてバックアップフォルダが無駄に増えてしまいます。
それで今回、フォルダのチェックサムを取り、変化がないかを確認するプログラムを組んでみたいと思います。

今回は、かなりマニアックな話になので、興味ある人だけ見てくださいね。

簡単な仕組みの説明

チェックサムって普通ファイルに取るものですよね。ではどうやってそれを取るのでしょうか?

簡単に言うと、フォルダの内容(ファイル名・更新日・ファイルサイズなど)をテキストに全て吐き出して、そのファイルのチェックサムを取るという方法です。
それで本当に大丈夫と言われると、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」コマンドを利用します。
こちらも無駄な情報が出ないように、不要な行は削除しています。

まとめ

いかがだったでしょうか?これをうまく使えば、無駄なバックアップは取る必要ありません。前回のチェックサムと、新たに作成したチェックサムを比較すれば、ファイルが編集されたか高速にチェック出来るって訳です。もし良かったら使ってみてくださいね。

IT

Posted by スングル