【发布时间】:2013-10-12 16:12:58
【问题描述】:
我需要比较 2 个文件夹“A”和“B”并获取新添加或修改的文件和文件夹的列表。
我尝试使用 Winmerge 软件,但它没有比较内部文件夹中存在的文件(所以我必须手动指向每个内部文件夹并进行比较)
有什么办法可以做到这一点。
【问题讨论】:
-
需要在WinMerge软件中启用'recursive'复选框来实现这个
标签: windows directory compare diff
我需要比较 2 个文件夹“A”和“B”并获取新添加或修改的文件和文件夹的列表。
我尝试使用 Winmerge 软件,但它没有比较内部文件夹中存在的文件(所以我必须手动指向每个内部文件夹并进行比较)
有什么办法可以做到这一点。
【问题讨论】:
标签: windows directory compare diff
以下 PowerShell 代码比较两个文件夹的文件列表。它会检测重命名或新创建的文件和文件夹,但不会检测修改的数据或不同的时间戳:
$dir1 = Get-ChildItem -Recurse -path C:\dir1
$dir2 = Get-ChildItem -Recurse -path C:\dir2
Compare-Object -ReferenceObject $dir1 -DifferenceObject $dir2
How to run a PowerShell script 解释了如何在脚本中运行上述代码。
【讨论】:
Compare-Object 是 PowerShell 中的通用对象比较函数。 @kirill 以一种非常聪明的方式使用它,向它提供了两个路径数组,每个路径都是使用Get-ChildItem 获得的。将-Force 添加到Get-ChildItem 以包含隐藏的文件系统条目。
这不一定比已经提到的其他选项更好,但它可能更适合某些用例。就我而言,我想在将这些差异从一个目录复制到另一个目录之前看看有什么不同。这种方法非常适合,因为/L 选项意味着只记录运行此命令时会发生的情况。
robocopy C:\dir1 C:\dir2 /MIR /FP /NDL /NP /L
您可以使用其他标志进一步细化输出格式,或更改用于比较的逻辑等。有关所有选项,请参阅robocopy docs。
【讨论】:
/XO /XN 以忽略较旧/较新的文件。如果您需要列出目录中的差异(甚至是空目录),请删除 /NDL。
几年前,我制作了一个命令行实用程序 CrcCheckCopy,以帮助我验证大型数据副本的完整性。它读取源文件夹并生成所有文件的 CRC 列表。然后,使用这个列表,它可以验证另一个文件夹。
几年后我还使用它来验证同一个文件夹,以确保没有任何内容被意外删除或修改。
我从here 免费提供它,以防遇到这个问题的人想尝试一下。
【讨论】:
我们多年来一直在使用 Beyond Compare,它非常有用。您可以看到哪些文件相同,哪些文件仅在文件夹“A”中,哪些文件仅在文件夹“B”中,以及不同的文件(对于这些文件,您可以看到已进行了哪些特定修改)。
【讨论】:
对于 Windows,您可以使用 this solution。
这是正确的方法,无需外部 下载。一开始看起来很多,但一旦你做到了, 这很容易。
它适用于从 7 到 95 的所有 Windows 版本。 对于我们的示例,假设您正在比较两个名为“A”的目录 和“B”。
- 运行 cmd.exe 以获取命令提示符。 (在 Windows 7 中,powershell 对此不起作用,仅供参考。)然后再做一次,这样你就有两个 它们并排打开。
- 在每个窗口中转到您要比较的目录。 (使用“cd”命令。如果您对此不满意,那么您 可能应该与外部实用程序一起使用,除非你想 学习命令提示符。)
- 在一个窗口中键入“dir /b > A.txt”,在另一个窗口中键入“dir /b > B.txt”。您现在将有两个文本文件,列出每个文件的内容 目录。 /b 标志表示裸露,它会去除目录列表 仅包含文件名。
- 将 B.txt 移动到与 A.txt 相同的文件夹中。
- 键入“fc A.txt B.txt”。命令“fc”表示文件比较。这将吐出两个文件之间差异的列表,并带有 每个差异上方和下方的额外文本行,因此您知道在哪里 他们是。有关如何格式化输出的更多选项,请键入 'fc /?在提示下。您还可以将差异通过管道传输到另一个 使用类似“fc A.txt B.txt > Difference.txt”的文件。
有 很有趣。
【讨论】:
/s 用于递归子目录,并省略了/b,因此我也可以比较文件时间和日期。 (当然,每个“目录”行都是不匹配的,因为目录名称不同。)