[タイトル] dfd64 二つのディレクトリの比較と重複ファイルの削除 dirlist ディレクトリリスト表示 [注意事項] このソフトウェアの使用により何らかの問題が発生しても作者は責任を負いません。 代替データストリームには対応していません。ソフトウェアによってはある種の 機能を特に明言することなく代替データストリームを使って実現していることが あります(例 IEでインターネットゾーンからダウンロードしたファイルの警告)。 [仕様] dfd64 [-s|-d] [-r] [-z] [-t] [-e ext] [-p] [-q] [-a] [-v] [-l] [-c|-b] [-f ext] [-n] [-g] [-k] [-w] [-i] [-m] [-1|2|3|4] [srcdir dstdir] -s ファイルが一致した場合、srcdirのファイルを削除します。 -pを指定したとき、srcdirの部分一致ファイルも削除します。 -dとは同時に指定できません。 -d ファイルが一致した場合、dstdirのファイルを削除します。 -pを指定したとき、dstdirの部分一致ファイルも削除します。 -sとは同時に指定できません。 -r 書き込み禁止ファイルでも削除します。 -s、-d、-qを指定したときに意味を持ちます。 -rを指定しない場合は書き込み禁止ファイルは削除しません。 -rを指定した場合は書き込み禁止ファイルも削除します。 -z -s -d -q -r の意味を変更し、削除ではなく、から(空)のファイル にします。該当ファイルの隠し属性は解除されます。 -t ファイルのタイムスタンプを比較します。 完全に一致するか比較します。 6版までのDFD,dfd64では1秒の単位で比較していました。1秒未満の値は 無視されていました。7版からのdfd64では100ナノ秒の単位で比較します。 -tを指定しない場合はタイムスタンプを比較しません。 -tを指定した場合はタイムスタンプとファイルの中身が比較の対象になり ます。タイムスタンプが異なるとそれだけで不一致とみなします。 -e ext 特定の拡張子のファイルのみを比較します。 -eを指定しない場合は拡張子の無いファイルを含めすべての拡張子のファイル を比較します。 -eを指定した場合はextで指定された特定の拡張子のファイルだけを比較 します。extには.を含めます。.だけの指定は拡張子無しになります。複数の 拡張子をつなげて指定できます。extにはワイルドカード(*や?)は 使えません。 例 -e .txt .txt ファイルだけ -e .htm.html.sht.shtml. .htm .html .sht .shtml と 拡張子なし -e . 拡張子なしのファイルだけ 拡張子に空白を含む場合はextを""で囲んでください。 -p 部分一致のログ(dfdpart.log)を作成します。 一方がもう一方の後ろにデータを追加したものかをチェック出来ます。 -pを指定した場合はファイルのサイズが違っていると小さいほうのサイズ 分までが一致するかをチェックします。-pを指定していてサイズが異なって いるときは-tを指定していてもタイムスタンプの比較はしません。 -pを指定しない場合はファイルのサイズが違っているとそれだけで不一致と みなし、部分一致かはチェックしません。 -q 部分一致ファイルを削除します。 -pを指定したときに意味を持ちます。 -a ログファイルに追加で書き込みます。 -aを指定しない場合はログファイルの以前の内容は無くなります。 -aを指定した場合はログファイルの以前の内容の後ろに追加します。 dfdaer.logはこの指定に無関係に常に追加で書き込まれます。 -v 進捗を表示します。 -nが指定されている場合は不一致個所を表示します。 -l 詳細情報のログ(dfdlong.log)を作成します。 -c dstdirが存在しない場合でもsrcdirのファイル単位にチェックします。 -cを指定しない場合はdstdirのディレクトリが存在しないならそれ以上 検索しません。検索しなかったファイルはログとファイル数のカウント の対象になりません。 -cを指定した場合はdstdirのディレクトリが存在しなくてもdstdirの ファイルを検索します。そのため実行時間がよけいにかかります。 この存在しないことが明らかなファイルもログの対象になり、ファイル数 はカウントされます。 -bとは同時に指定できません。 -b srcdirにのみ存在するファイルやディレクトリをdstdirへ移動するバッチ (dfdmove.bat)を作成します。-p -dまたは-p -qを指定してdstdirの部分 一致ファイルが削除される場合も対象です。 -cとは同時に指定できません。 このバッチファイルは後で実行できます。 バッチファイルの内容は次のようなものです。 move "srcdir\dir1\dir2\file" "dstdir\dir1\dir2\file" -f ext ディレクトリとファイルの比較になってしまう組み合わせを解消する処理を -bで作成するバッチに追加します。-fは-bを指定した場合にだけ有効です。 srcdir側がディレクトリでdstdir側がファイルの場合、dstdir側ファイルの 名前の後ろに文字を追加して名前を変更するコマンドをバッチに追加します。 srcdir側がファイルでdstdir側がディレクトリの場合、srcdir側ファイルの 名前の後ろに文字を追加して名前を変更するコマンドをバッチに追加します。 追加する文字はextで指定します。 例 -f .file 該当するファイルに.fileという拡張子を追加します。 -f .removethisfile 後で一括して削除するために他には無さそうな拡張子を 追加します。 バッチファイルの内容は次のようなものです。 move "srcdir\dir1\dir2\file" "srcdir\dir1\dir2\file.removethisfile" -n 不一致の範囲とバイト数を調べます。結果はdfdlong.logに書かれます。 この指定を行うと不一致ファイルでも最後まで読み込むので処理が遅くなり ます。-lを指定した場合に有効です。 -g 両方に存在するファイル同士の比較結果のログ(dfdfile.log)を作成 します。 片方にのみファイルが存在する場合や、もう一方がディレクトリの場合は対象 外です。 -k システムに対する負荷を下げて処理します。 -w タイトルにsrcdir側ファイル名を表示します。 -i ほとんどのファイルが一致することをヒントとして与えます。 この指定を行うとほとんどのファイルが一致していると仮定して処理します。 実際にほとんどのファイルが一致しているならこの指定を行うと高速になる こと(同一ドライブ内のファイルの比較を行う場合など)があります。 実際にはほとんどのファイルが一致していないのにこの指定を行うとかなり 遅くなります。 この指定を行わないとほとんどのファイルは一致していないと仮定して処理 します。 -nを指定する場合はこの指定も行うことをおすすめします。 -m 一括ログを作成します。 srcdir 比較元のディレクトリ srcdirにはワイルドカード(*や?)は使えません。 dstdir 比較先のディレクトリ dstdirにはワイルドカード(*や?)は使えません。 srcdirとdstdirを省略するとGUIによりフォルダを選択できます。 [説明] 二つのディレクトリのファイルを比較します。重複するファイルを削除できます。 比較結果はカレントディレクトリのログファイルに書き込みます。 コマンドプロンプトを起動し、そこから実行してください。 srcdirとdstdirで名前が同じファイルを比較します。サブディレクトリも検索します。 両方に存在するファイルだけを比較対象にします。 srcdirとdstdirにファイルを指定するとその二つのファイルを比較します。この場合は ファイルの名前が同じである必要はありません。 ファイルのサイズ・タイムスタンプ・内容が比較対象です。 比較できなかった場合は一致・不一致の数にはカウントしません。 srcdirのファイルと同じ名前のdstdirのディレクトリがあるとファイルが無かった ものとして処理します。 srcdirのディレクトリと同じ名前のdstdirのファイルがあるとディレクトリが無かった ものとして処理します。 比較するファイルのサイズは一致するのに、読み出しできるデータサイズが一致 しない場合error 12を表示します。これはファイルシステムに異常があると発生 します。error 12が起きた場合はscandiskやchkdskを実行してみてください。 システムに高負荷が掛かっている場合にも起きる可能性もあります。その場合は負荷 が低いときに再試行してください。 -tでタイムスタンプを比較する場合、FATファイルシステムとNTFSとの間では最大2秒の 時刻のずれが生じるため同じファイルをコピーしたものを比較してもタイムスタンプは 不一致になる場合があります。 比較の結果ファイルが一致していた場合、-sを指定しているとsrcdirのファイルを削除 します。-dを指定しているとdstdirのファイルを削除します。-sと-dは両方同時には 指定できません。いずれも指定していなければファイルは削除しません。 -pを指定した場合は、サイズが異なるファイルに対して、サイズの小さいほうが、もう 一方のファイルの先頭部分と一致するかをチェックします。この場合の小さいほうを 部分一致ファイルと呼びます。 -pと-sを指定すると部分一致ファイルがsrcdirにあると部分一致ファイルを削除 します。 -pと-dを指定すると部分一致ファイルがdstdirにあると部分一致ファイルを削除 します。 -pと-qを指定すると部分一致ファイルがsrcdirとdstdirのどちらにあっても部分一致 ファイルを削除します。 -pを指定しない場合はサイズの異なるファイルは不一致としてあつかいます。 -bを指定して作成されるバッチファイルは、ファイル名が長いと1行の長さの制限を 超えることがあります。その場合正しく実行されません。バッチファイル実行後、再度 -bを指定してバッチファイルを作成して、そのバッチファイルの中身がある場合それは 以前のバッチファイルの実行においてファイルの移動が出来なかったということです。 そのファイルについては別の方法で移動してください。再度作成したバッチファイルを 実行してもファイルの移動はおそらく出来ません。長すぎるパス名などが原因です。 -e, -f以外の指定はひとつにまとめることが出来ます。 例 dfd64 -sravlgkwi -e ext srcdir dstdir -s -r -a -v -l -g -k -w -iをまとめます。 srcdirとdstdirを省略するとGUIによりフォルダを選択できます。 ディレクトリの後ろには\をつけないでください。ただしルートディレクトリは\で問題 ありません。 例 dir\ … 不可 dir … 可 \ … 可(ルートディレクトリ) ディレクトリが空白を含む場合は""で囲んでください。 例 "C:\Program Files" UNICODE版は約32,000文字までのファイル名に対応します。 UNICODE版は日本語以外のファイル名にも対応します。 設定ファイルとしてdfd64.iniを使用します。dfd64.iniが無い場合に自動でdfd64.ini を作成することはありません。設定を保存したい場合は、dfd64.iniをdfd64.exeと同じ フォルダに作成しておいてください。 dfd64.iniを書き込み禁止にしておくと設定は書き換えません。 [SHBrowseForFolder]セクションのBIF_NEWDIALOGSTYLEを1に指定すると設定が有効な 環境(Windows 2000/Me以降等)では、フォルダ選択ダイアログがリサイズや新規 フォルダを作成できる新しい形式になります。この指定が無い場合は従来のフォルダ 選択ダイアログになります。古い環境(Windows NT 4.0/98まで等)では1を指定しないで ください。 [history0]セクションのsourceとdestinationには実行したsrcdirとdstdirの値が 入り、次回のフォルダ選択ダイアログの初期値になります。 [options]セクションのBOMを1に指定するとUNICODE版ではログファイルはBOM有りに なります。この指定が無い場合はBOM無しです。 この設定を変更するにはテキストエディタで直接dfd64.iniを変更してください。 dfd64.iniの例 [SHBrowseForFolder] BIF_NEWDIALOGSTYLE=0 [history0] source=<前回指定したsrcdir> destination=<前回指定したdstdir> [options] BOM=1 ログファイルはdfd64を起動したときのカレントドライブのカレントディレクトリ に作成されます。 dfdaer.log 実行時のパラメータ、発生したエラー、実行結果サマリー このファイルは常に追加で書き込みますので、実行するたびにすこし ずつサイズが大きくなっていきます。必要に応じて削除してください。 dfdssame.log 比較の結果一致したsrcdirのファイル dfddsame.log 比較の結果一致したdstdirのファイル dfdsdif.log 比較の結果不一致であったsrcdirのファイル dfdddif.log 比較の結果不一致であったdstdirのファイル dfdserr.log 比較できなかった原因になった、あるいはerror12が発生したsrcdirの ファイル dfdderr.log 比較できなかった原因になった、あるいはerror12が発生したdstdirの ファイル dfdsfnf.log dstdirには無かったファイルに対応するsrcdirのファイル dfddfnf.log dstdirには無かったファイル dfdsdnf.log dstdirには無かったディレクトリに対応するsrcdirのディレクトリ dfdddnf.log dstdirには無かったディレクトリ dfdsrm.log 一致したため削除したsrcdirのファイル dfddrm.log 一致したため削除したdstdirのファイル dfdpart.log 部分一致したファイルの小さいほうのファイル(-p指定時のみ) dfdlong.log 不一致の原因、エラーの原因等の詳細情報(-l指定時のみ) dfdfile.log 両方に存在するファイルの比較結果(-g指定時のみ) dfdmove.bat srcdirにのみ存在するファイルやディレクトリをdstdirへ移動する バッチ(-b指定時のみ) dfdlog.txt 一括ログ(-m指定時のみ) ログファイルのタイムスタンプの表示の後ろの桁数の多い数字はタイムスタンプ を数値で表現したものでナノ秒単位の値です。 UNICODE版ではログファイルのファイル名の前に\\?\が付きます。ネットワークの場合 には\\?\UNC\server\shareという形式になります。これは260文字を超える場合の ファイル名の規則です。 http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx カレントドライブは ドライブ名: で変更できます。 カレントディレクトリはコマンドプロンプトから、 cd 変更したいディレクトリ で変更できます。 カレントドライブ・カレントディレクトリはコマンドプロンプトから cd で確認できます。 例 d: cd \temp cd dfd64 -sravlgkw D:\backup\mail D:\mail エクスプローラからコマンドプロンプトにフォルダやファイルをドラッグすると そのフルパス名が入力されます。dfd64 [オプション] まで入力したあとディレクトリ 名を入力するのに使うと便利です。 注 Windows Vistaで仕様が変更されフルパス名の入力が出来なくなりました。 以下 http://support.microsoft.com/kb/929457 の回避策を引用。 この問題を回避するには、ファイルまたはフォルダのパスをコマンド プロンプト ウィンドウに貼り付けます。これを行うには、次の手順を実行します。 1. エクスプローラを起動し、パスをコピーするファイルまたはフォルダを 見つけます。 2. Shift キーを押しながらそのファイルまたはフォルダを右クリックし、 [パスとしてコピー] をクリックします。 3. コマンド プロンプト ウィンドウ内の任意の場所を右クリックし、[貼り付け] をクリックします。ファイルまたはフォルダのパスがコマンド プロンプトに 貼り付けられます。 注 : Cmd.exe プログラムの簡易編集モードが有効になっている場合、[貼り付け] をクリックする必要はありません。コマンド プロンプト ウィンドウの任意の場所 を右クリックすると、コマンド プロンプトにパスが表示されます。 事例 -bの移動用バッチの作成機能と-pの強化による部分一致ファイル削除機能でsrcdirの ファイルをdstdirに一本化するのを支援します。 1. dfd64 -s -r -p -q -l -b srcdir dstdir srcdirの一致ファイルと、どちらかの部分一致ファイルを削除し、移動用バッチと 詳細ログを作成します。 2. dfdmove.bat srcdirのみに存在するファイルをdstdirへ移動します。 3. srcdirに残るファイルは詳細ログdfdlong.logで不一致ファイルを確認し、手作業で 移動や削除をします。 dfd64(6版より)はDFDの4GB以上のファイルに対応したバージョンです。 5版までのDFDは2GB未満のファイルのみの場合用です。2GB以上のファイルがある 場合には使用しないでください。 8版よりファイル処理を標準ライブラリからAPIのFILE_FLAG_NO_BUFFERING | FILE_FLAG_SEQUENTIAL_SCANを使用するように変更しました。これによりファイルの 読み込みにOSのキャッシュを使わなくなり、他のソフトの動作への影響を少なく しました。安定的な速度が出ます。OSのキャッシュを使う場合はキャッシュされて いないとかなり遅く、キャッシュされているとかなり速くなります。 ファイル比較ソフトで大量のファイルを比較する場合、通常はキャッシュされていない のでOSのキャッシュを使わないほうがよい場合が多いはずです。 dfd8.exe(公開終了)は従来のOSのキャッシュを使う方法のものです。 約4GBのファイル1個のみのフォルダ1と同一ファイル1個のみのフォルダ2を比較して みたところ3.7倍ほど高速でした。 dfd8.exe 1回目994秒 2回目991秒 dfd64.exe 1回目263秒 2回目263秒 [仕様] dirlist [dir] dir 表示するディレクトリ 省略時はカレントディレクトリ [説明] ファイルとディレクトリを表示します。 UNICODE版は約32,000文字までのファイル名に対応します。 UNICODE版は日本語以外のファイル名にも対応します。 [利用例] dirlist srcdir|sort >srcdir.txt dirlist dstdir|sort >dstdir.txt fc srcdir.txt dstdir.txt|more dfd64 -g srcdir dstdir more