我需要比较 2 个文件夹"A"和"B",并获取新添加或修改的文件和文件夹列表。
我尝试使用 Winmerge 软件,但它没有比较内部文件夹中存在的文件(所以我必须手动指向每个内部文件夹并且必须进行比较(
有什么办法可以做到这一点。
以下 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
第三方编辑
如何运行 PowerShell 脚本介绍了如何在脚本中运行上述代码。
对于 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>差异.txt"之类的文件。
有 乐趣。
这不一定比已经提到的其他选项更好,但它可能更适合某些用例。就我而言,我想在将这些差异从一个目录复制到另一个目录之前看看有什么不同。这种方法非常适合此,因为/L
选项意味着仅记录将要发生的事情。
robocopy C:dir1 C:dir2 /MIR /FP /NDL /NP /L
您可以使用其他标志进一步细化输出格式,或更改用于比较的逻辑等。 有关所有选项,请参阅 robocopy 文档。
我们已经使用Beyond Compare多年了,它非常有用。 您可以查看哪些文件相同,哪些文件仅在文件夹"A"中,哪些文件仅在文件夹"B"中,以及不同的文件(对于这些文件,您可以看到进行了哪些特定修改(。
几年前,我制作了一个命令行实用程序 CrcCheckCopy 来帮助我验证大数据副本的完整性。它读取源文件夹并生成所有文件的CRC列表。然后,使用此列表,它可以验证其他文件夹。
几年后,我还使用它来验证同一文件夹,以确保没有意外删除或修改任何内容。
我从这里免费提供它,以防到达这个问题的人想尝试一下。
FreeFileSync为我完成了这项工作。