【问题标题】:Compare 2 directories in windows比较windows中的2个目录
【发布时间】:2013-10-12 16:12:58
【问题描述】:

我需要比较 2 个文件夹“A”和“B”并获取新添加或修改的文件和文件夹的列表。

我尝试使用 Winmerge 软件,但它没有比较内部文件夹中存在的文件(所以我必须手动指向每个内部文件夹并进行比较)

有什么办法可以做到这一点。

【问题讨论】:

  • 需要在WinMerge软件中启用'recursive'复选框来实现这个

标签: windows directory compare diff


【解决方案1】:

以下 PowerShell 代码比较两个文件夹的文件列表。它会检测重命名或新创建的文件和文件夹,但不会检测修改的数据或不同的时间戳:

$dir1 = Get-ChildItem -Recurse -path C:\dir1
$dir2 = Get-ChildItem -Recurse -path C:\dir2
Compare-Object -ReferenceObject $dir1 -DifferenceObject $dir2

来源:MS Devblog - Dr. Scripto

第三方编辑

How to run a PowerShell script 解释了如何在脚本中运行上述代码。

【讨论】:

  • 如果您解释了命令的不同组件的作用,将会很有用。
  • @kojow7 Compare-Object 是 PowerShell 中的通用对象比较函数。 @kirill 以一种非常聪明的方式使用它,向它提供了两个路径数组,每个路径都是使用Get-ChildItem 获得的。将-Force 添加到Get-ChildItem 以包含隐藏的文件系统条目。
  • 无论嵌套多深,此方法都有效
  • 这对我不起作用。对于两个具有不同内容的同名文本文件的目录,在任何地方都没有输出,而 kdiff3 正确地报告了非常明显的差异。
  • @MiloDC 这比较的是文件列表,而不是文件内容...
【解决方案2】:

这不一定比已经提到的其他选项更好,但它可能更适合某些用例。就我而言,我想在将这些差异从一个目录复制到另一个目录之前看看有什么不同。这种方法非常适合,因为/L 选项意味着只记录运行此命令时会发生的情况。

robocopy C:\dir1 C:\dir2 /MIR /FP /NDL /NP /L

您可以使用其他标志进一步细化输出格式,或更改用于比较的逻辑等。有关所有选项,请参阅robocopy docs

【讨论】:

  • 添加 /XO /XN 以忽略较旧/较新的文件。如果您需要列出目录中的差异(甚至是空目录),请删除 /NDL
  • 在我看来,这比其他选项更好 - 更容易使用输出 - 更多功能的选项。感谢 Vasiliy 提供的额外开关。我还建议使用 /xf 来排除非必要文件,例如 .ini 和 thumbs.db。例如:/xf *.db /xf *.ini
【解决方案3】:

几年前,我制作了一个命令行实用程序 CrcCheckCopy,以帮助我验证大型数据副本的完整性。它读取源文件夹并生成所有文件的 CRC 列表。然后,使用这个列表,它可以验证另一个文件夹。

几年后我还使用它来验证同一个文件夹,以确保没有任何内容被意外删除或修改。

我从here 免费提供它,以防遇到这个问题的人想尝试一下。

【讨论】:

    【解决方案4】:

    我们多年来一直在使用 Beyond Compare,它非常有用。您可以看到哪些文件相同,哪些文件仅在文件夹“A”中,哪些文件仅在文件夹“B”中,以及不同的文件(对于这些文件,您可以看到已进行了哪些特定修改)。

    【讨论】:

    • BeyondCompare 是一款出色的多平台工具,价格合理并与许多 IDE 集成。我的多平台许可证可以在我的 Windows、Linux 和 MacOS 系统上移植——前提是我一次只使用一个实例。优秀的产品。伟大的公司,滑板车软件。我没有任何关系。自 2000 年以来一直是一个快乐的用户。
    【解决方案5】:

    对于 Windows,您可以使用 this solution

    这是正确的方法,无需外部 下载。一开始看起来很多,但一旦你做到了, 这很容易。
    它适用于从 7 到 95 的所有 Windows 版本。 对于我们的示例,假设您正在比较两个名为“A”的目录 和“B”。

    1. 运行 cmd.exe 以获取命令提示符。 (在 Windows 7 中,powershell 对此不起作用,仅供参考。)然后再做一次,这样你就有两个 它们并排打开。
    2. 在每个窗口中转到您要比较的目录。 (使用“cd”命令。如果您对此不满意,那么您 可能应该与外部实用程序一起使用,除非你想 学习命令提示符。)
    3. 在一个窗口中键入“dir /b > A.txt”,在另一个窗口中键入“dir /b > B.txt”。您现在将有两个文本文件,列出每个文件的内容 目录。 /b 标志表示裸露,它会去除目录列表 仅包含文件名。
    4. 将 B.txt 移动到与 A.txt 相同的文件夹中。
    5. 键入“fc A.txt B.txt”。命令“fc”表示文件比较。这将吐出两个文件之间差异的列表,并带有 每个差异上方和下方的额外文本行,因此您知道在哪里 他们是。有关如何格式化输出的更多选项,请键入 'fc /?在提示下。您还可以将差异通过管道传输到另一个 使用类似“fc A.txt B.txt > Difference.txt”的文件。

    有 很有趣。

    【讨论】:

    • WinMerge 有助于比较目录输出 txt 文件。我将/s 用于递归子目录,并省略了/b,因此我也可以比较文件时间和日期。 (当然,每个“目录”行都是不匹配的,因为目录名称不同。)
    • WinMerge 在发布此内容时在其 GUI 中本机支持目录比较,即据我所知无需使用 /s 或 /b。它在 GUI 中对我来说非常有用。 (@BobStein 感谢发布 WinMerge - 它是 Windows 用户的绝佳解决方案!)
    猜你喜欢
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 2011-07-19
    • 2015-08-22
    • 1970-01-01
    • 2015-10-15
    相关资源
    最近更新 更多