• 締切済み

Windows用ファイル比較プログラム

Windows用のファイル比較を探しています。 要件は以下のとおりです。 ・コマンドラインインターフェイスであり、完全無人バッチ処理ができる ・サブディレクトリを再帰的に比較をする ・ERRORLEVELで一致しているか一致していないか判別できる ・VB等外部ランタイムを使用しないもの ・2Gbytes以上のファイルも正常に比較できること ・タイムスタンプの比較をオプション等で無視できること ・可能であれば、64bitネイティブがあること タイムスタンプの比較、2Gbytes以上のファイル以外の機能であれば fcmp32 が該当していて、使えましたが 2Gbytes以上のファイルがかなり多くなってきてエラーが出てきています。 fc.exe は、ディレクトリ名の指定方法により、File not found (Directoryではなく)に なってしまい、比較ができません。 現在、代替えで、WinMergeを使用していますが、GUI故・・・ よろしくお願いします。

みんなの回答

  • 5S6
  • ベストアンサー率29% (675/2291)
回答No.4

サブディレクトリは確かにできなかったみたいですね。 c++で再帰プログラムを作って、fc呼び出すとかでどうでしょうか? c++の再帰は検索すればいくらでも出てくるのでコピペで済むと思います。 スタティックリンクすれば単体で動きます。 または自分で作ってしまう。 ・・・で。

  • 5S6
  • ベストアンサー率29% (675/2291)
回答No.3

こんなんでどうでしょうか? ESCコードの制限があるので全角変換してあります。 1ファイルずつ停止しているので不要ならpauseしなければいいだけです。 適当に改造してください。 fcb.bat --------------------------------- @echo off echo ファイルを比較をします。 pause for %%A in (”R:¥比較元dir¥*.*”) do ( rem echo %% ̄fA for %%B in (”R:¥比較先dir¥*.*”) do ( rem echo %% ̄fB fc /b %% ̄fA  %% ̄fB pause ) )

ymda
質問者

お礼

ありがとうございます。 これですと比較元¥*.* のみで、それ以下のサブディレクトリが 再帰できないようです。

  • 5S6
  • ベストアンサー率29% (675/2291)
回答No.2

半分の確立でFile not foundっておかしくないですか? Echoで表示させて、失敗したファイル名をコピペしてcopyなり してみてください。ダメならプログラム、バッチファイルの問題です。 あとは特殊文字とか文字コードの問題でしょうか。 C,C++の場合は、読み込み方法によって速度が大きく違いますね。 作って。の場合は別に質問した方がいいと思います。

ymda
質問者

補足

ありがとうございます。 普通に、(あくまでサンプルです) dir z:\abc dir z:\def とやって、ディレクトリの内容がきちんと表示されるのに fc /b z:\abc\*.* z:\def\*.* とやって、両方検索されたり、不安定だったり、File not found であったりすることがあります。

  • 5S6
  • ベストアンサー率29% (675/2291)
回答No.1

PowerShellで Get-ChildItem と FC でバッチファイル作るか または参考程度にハッシュ値比較で http://social.technet.microsoft.com/Forums/ja-JP/powershellja/thread/e5f1a7e6-156f-470b-a51e-65829883aed1/ File not found は""で囲んでないから発生?

ymda
質問者

お礼

ありがとうございます。 powershellはまったく使い方がわからないので、 やるとしたら、VBScriptかC(C++ではない)のが速くなってしまいます。 また、File not foundは、"" で囲んでいても、なってしまいます。 ※実際は、実行すると、半分の確率でFile not foundになります。

関連するQ&A

  • Windowsのファイル・フォルダのタイムスタンプ

    Windows10ですが、ファイルやフォルダを作成してもすぐに忘れてしまうことがあります。その理由としてあるディレクトリ(フォルダ)\Aのサブのディレクトリ\A\Bを変更したりしても元のフォルダ\Aのタイムスタンプが変更されないということがあるように思います。ディレクトリの深いところで何らかの更新をするとそれが上のディレクトリのタイムスタンプを更新するというような設定はないのでしょうか。 技術的に難しい感じはしないのですが、そうしない理由は何でしょうか。フォルダを作った日にちをいつまでもキープしておきたいということでしょうか。 また、フォルダをコピーするとコピーした日がスタンプされますね。移動はどうなるでしょうか(実験すればすぐですが)。タイムスタンプの考え方とはどのようなことになるでしょうか。また、タイムスタンプの付け方の設定変更はできないでしょうか。

  • WinMergeで日付の違いを無視して比較するには

    あるツールAで生成したフォルダAの配下にある複数の異なるExcelファイルと、 ツールAを改良したツールBで生成したフォルダBの配下にある複数の異なるExcelファイルが、 改良前と改良後で同じであることを確認するために、 WinMerge + プラグイン CompareMSExcelFiles.sct で確認したら、 「トップの比較結果の画面」(*1)では、 すべてのExcelファイルで「異なります」という結果になっていた。 このうちの1つのExcelファイル名をダブルクリックすると かなり時間がかかって、このExcelファイルを比較するために WinMergeおよびプラグインが自動的に生成したと思われる 多数のファイルが表示されている 「構成ファイルの比較結果の画面」(*1)が表示されるが、 この中の (0)DocumentProperties.txt という名前のファイル の中の Last save time の値が異なっていた。 つまり、生成したファイルの日時が違っているだけなので、 この部分 ( Last save time ) のチェックは無視して、 Excelファイル名が表示されている「トップの比較結果の画面」(*1)には、 「同一です」と表示して、 この部分 ( Last save time ) 以外に不一致がある場合は、 「異なります」と表示してほしいのですが、 WinMergeやプラグインの設定で、(必要であれば他の方法で) 日時 ( Last save time ) のチェックを、 無効にすることはできるでしょうか。 (*1) の名称は仮に付けた名前です。  「構成ファイルの比較結果の画面」は 「トップの比較結果の画面」に比べて、表示されるまでに かなり時間を要するので、日時 ( Last save time ) だけが 異なる場合は、「構成ファイルの比較結果の画面」を 開かなくても済むようにしたいです。 環境 Windows7 Excel2010 WinMerge64(2.14.0.106+-jp-106) PluginPack64bit(CompareMSExcelFiles.sct) よろしくお願いします。

  • 酷似する2つのディレクトリを比較して、違う箇所を検出したい

    ある、とてもよく似た2つのディレクトリがあります。 構造はかなり深く、複雑です。ファイル数も膨大です。 この2つのディレクトリを比較して、 - 片方に存在して、もう片方に存在しないファイルやディレクトリ - タイムスタンプが異なるファイルやディレクトリ を検出するツール、または、方法を探しています。 どなたかご存知の方、お知恵をお貸しください。 環境は、Windows XP Pro SP2 です。 よろしくお願いします。

  • 作成日時のみを比較(コンペア)したいです。

    もちろん、見て分かるような、一つ二つとか、少量のデータの作成日時を比較しようというのではありません。 大容量データについて、全ファイルの作成日時を比較したいです。 多数のフォルダ、ディレクトリの比較ができるソフトで、 タイムスタンプ(作成日時)のみを比較できるソフトをご教授ください。 フリーの方がありがたいですが、シェアウェアの場合は、買うかどうかは分かりませんが、ぜひご紹介ください。 Windows XP

  • VBAでタイムスタンプを比較して

    VBAで色々とやろうとしているのですが、以下について教えてください。   c:\Documents\123.doc のタイムスタンプと d:\documents\123.Txt のタイムスタンプを比較して、 c:\Documents\123.doc のタイムスタンプが新しい時だけ、このファイルを d:\documents\123.Txt に上書きする。 その場合、文書は、Txtに変換?する。  特に、タイムスタンプの比較について教えて欲しいので、よろしくお願いします。

  • C# でファイルのタイムスタンプの比較

    C# でファイルのタイムスタンプの比較 public class FileList {  long size;  DateTime time;  string name;    : があり、このクラスのファイルを比較するメソッドcmpを作りました。 private int cmp(FileList f) {  return (   (f.size < this.size) ? -1 :   (f.size > this.size) ? 1 :   (f.time > this.time) ? -1 :   (f.time < this.time) ? 1 :   this.name.CompareTo(f.name)); } しかし、USBメモリにコピーしたファイルの中に、同一と判断されないファイルが出てしまいます。原因を調べたら、USBメモリにコピーするときにタイムスタンプが変更するためとわかりました。 http://support.microsoft.com/kb/402160/ja 「奇数秒に作成されたファイルを NTFS パーティションから FAT パーティションにコピーすると、作成日時の繰り上げが発生します。」という記載があり、原因はわかりました。 しかし、後半には、「NTFS ドライブと FAT ドライブ上のファイルのタイムスタンプを比較する場合は、この動作を考慮する必要があります。 」とだけ記載がありますが、具体的に、プログラムで、どのように考慮したらよいのかわかりません。「2秒以内なら同じとみなす」といった処理をすればよい事はわかりますが、ここで詰まっています。ご教示お願いします。

  • ディレクトリとファイルを、タイムスタンプを保持したままコピー・移動したい

     Windows95で、タイムスタンプを保持したままディレクトリと ファイルを同時にコピー・移動できるソフトを探しています。 ディレクトリとファイルの2回に分けてやれば出来ないことも ないのですが、ディレクトリだけは普通にやると、 他ドライブへのコピー・移動時はタイムスタンプが変わって しまいます(同ドライブ内へのコピーでも同様)。  Windows95ではディレクトリのタイムスタンプを保持したままの コピーなどは基本的にはできないようですが、何らかの方法で 実現した物が在ればと思います。

  • WinMerge日付の違いを無視して比較するには2

    以前、「WinMergeで日付の違いを無視して比較するには」 http://okwave.jp/qa/q9194642.html でご質問をして、丁寧な回答を頂きまして、 日付の違いを無視して比較することができるように なったのですが、以下のような問題で困っています。 「構成ファイルの比較結果の画面」(*2)では、 「テキストファイルは同一です」と表示されて、 このExcelファイルは一致していることは分かるのですが、 「トップの比較結果の画面」(*1)では、 すべてのExcelファイルで、 「バイナリファイルは異なっています」 と表示されているため、 「トップの比較結果の画面」(*1)で表示されている (100以上ある)すべてのExcelファイルを1つずつ開いて 「構成ファイルの比較結果の画面」(*2)を表示させないと 一致しているかどうかが分からないのです。 「トップの比較結果の画面」(*1)だけを見て、 ここに表示されているすべてのExcelファイルが、 テキストレベルで一致していることを 確認するようなことはできないでしょうか。 (*1) 比較実行が終わると最初に表示される画面で、   タブ名が「フォルダ名-フォルダ名」の画面です。 (*2) 上記(*1)の画面でファイルをダブルクリックすると   表示される画面で、   タブ名が「ファイル名 X 2」の画面です。 よろしくお願いします。

  • タイムスタンプを比較するソフト

    重複メールを整理しようと思い、いくつかのツールで試しましたが整理できない重複メールがあります。 (元ファイル名の末尾に連番が付いたもので、サイズやタイムスタンプは同じ) タイムスタンプだけで比較するソフトがありましたら教えて頂けないでしょうか? WinXP Becky2、emlCheck、undupで試しました

  • 保存された同一ファイル名をタイムスタンプで比較

    フォルダAとフォルダBに、同じファイル名のもの100ファイルずつあります。 フォルダAに最新のファイルがあるもの、フォルダBに最新のファイルがあるものと、両方とも同じもの。 という感じで管理がバラバラになってしまっています。 さらにはフォルダAにしかないファイル、フォルダBにしかないファイルが、若干あって、さらに混乱している状態です。 ・フォルダAにあってフォルダBに無いもの。また、その逆。 ・フォルダAとBの両方にある場合、どちらが新しいか。 タイムスタンプ(更新日)で調査できるツールはないでしょうか? AikoWinというフリーツールで、ファイルの有無は確認できました。 http://www.vector.co.jp/vpack/browse/pickup/pw6/pw006112.html テキストを比較するものは多く見つかります。 しかし、タイムスタンプで比較するものが見つからなくて困っています。 よろしくお願いします。

専門家に質問してみよう