【问题标题】:Looking for fast file comparison寻找快速文件比较
【发布时间】:2014-01-23 13:46:18
【问题描述】:

我的任务是比较 Windows 中数百个文件的列表。在每次比较中,我必须比较一对文件。 这些文件可以是二进制文件或文本文件(各种)

我正在寻找运行它的最快时间。我必须检查内容是否相同(我与内容本身无关 - 我必须报告==!=)。

最快的方法是什么? fc.exe?还有什么?

如果fc.exe 是答案,是否有任何参数可以加快响应时间?

我更喜欢使用作为标准 Windows 安装一部分的 EXE(但这不是必须的)。

谢谢你

【问题讨论】:

  • 可能取决于所涉及的文件长度,但FC 似乎是要走的路。现在 - 文件名列表是如何呈现的?
  • 文件的长度可能会产生误导,因为内容可能不同但文件大小是一样的。我在每组文件上分别运行 fc.exe file1 file2。
  • 视情况而定。现在 - 文件名是如何呈现的?
  • 您可以使用文件长度作为初始过滤器 - 两个不同长度的文件不能具有相同的内容,因此无需检查这样的一对。
  • @Magoo:你是什么意思'呈现'?它们可以是文本或二进制文件

标签: windows batch-file command-line compare diff


【解决方案1】:

我假设您想要进行二进制比较。

我会使用以下内容来比较两个文件:

fc "file1" "file2" /b >nul && echo "file1" == "file2" || "file1" != "file2"

编辑

如果您有许多非常大的文件要比较,那么在使用 FC 比较整个文件之前比较文件大小可能是值得的。我使用了same 指示变量,这样我就可以定义对“相同”或“不同”结果执行一次的操作,而无需求助于 CALLed 子例程。 CALL 相对较慢。

set "same="
for %%A in ("file1") do for %%B in ("file2") do (
  if %%~zA equ %%~zB fc %%A %%B /b >nul && set "same=1"
)
if defined same (
  echo "file1" == "file2"
) else (
  echo "file1" != "file2"
)

【讨论】:

    【解决方案2】:

    您可以使用第三方命令行工具获取每个文件的 CRC 十六进制字符串并比较十六进制字符串。

    根据您比较文件集的方式,使用此方法时,每个文件只需读取一次。

    【讨论】:

      【解决方案3】:

      @foxidrive 的答案有其优点,尤其是当文件很大并且在同一个物理驱动器上时,除非比较软件一次吞下大文件块导致磁盘抖动。

      两个可用的工具是

      内置(至少适用于 Windows 10) C:\Windows\System32\certutil.exe 这有一个稍微笨拙(巨大)的参数集,但效果很好,可以进行更多有用的转换,并且可以使用大量哈希算法(对不起,我丢失了可用算法的完整列表的链接);它绝对适用于 sha1 sha256 sha384 md5。 前任。 certutil -hashfile "E:\huge.7z" md5

      和 Microsoft 实用程序 fciv(默认为 md5 生成器) Google for "Microsoft File Checksum Integrity Verifier" 并从 Microsoft 下载 前任。 fciv bigFile.7z

      我知道这是一个老问题,但我没有看到这两个实用程序被提及太多......希望它对某人有所帮助。

      【讨论】:

        猜你喜欢
        • 2021-02-07
        • 2011-10-02
        • 2011-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-24
        相关资源
        最近更新 更多