我需要比较 2 个文件夹“A”和“B”并获取新添加或修改的文件和文件夹列表。
我尝试使用 Winmerge 软件,但它没有比较内部文件夹中存在的文件(所以我必须手动指向每个内部文件夹并进行比较)
有什么办法可以做到这一点。
对于 Windows,您可以使用此解决方案。
这是正确的方法,无需外部下载。一开始看起来很多,但是一旦你完成了,就很容易了。
它适用于从 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”之类的方式将差异通过管道传输到另一个文件中。
玩得开心。
以下 PowerShell 代码比较两个文件夹的文件列表。它将检测重命名或新创建的文件和文件夹,但不会检测修改的数据或不同的时间戳:
$dir1 = Get-ChildItem -Recurse -path C:\dir1
$dir2 = Get-ChildItem -Recurse -path C:\dir2
Compare-Object -ReferenceObject $dir1 -DifferenceObject $dir2
如何运行 PowerShell 脚本解释了如何在脚本中运行上述代码。
这不一定比已经提到的其他选项更好,但它可能更适合某些用例。就我而言,在将这些差异从一个目录复制到另一个目录之前,我想看看有什么不同。此方法非常适合,因为该/L
选项意味着仅记录运行此命令时会发生的情况。
robocopy C:\dir1 C:\dir2 /MIR /FP /NDL /NP /L
您可以使用其他标志进一步细化输出格式,或更改用于比较的逻辑等。有关所有选项,请参阅robocopy 文档。
我们多年来一直在使用 Beyond Compare,它非常有用。您可以看到哪些文件相同,哪些文件仅在文件夹“A”中,哪些文件仅在文件夹“B”中,以及不同的文件(对于这些文件,您可以看到已进行了哪些特定修改)。
几年前,我制作了一个命令行实用程序 CrcCheckCopy 来帮助我验证大型数据副本的完整性。它读取源文件夹并生成所有文件的 CRC 列表。然后,使用这个列表,它可以验证另一个文件夹。
几年后,我还使用它来验证同一个文件夹,以确保没有任何内容被意外删除或修改。
我从这里免费提供它,以防遇到这个问题的人想尝试一下。