我需要比较两个文件夹“A”和“B”,并获取新增或修改的文件和文件夹列表。
我尝试使用Winmerge软件,但它没有比较内部文件夹中存在的文件(因此我必须手动指向每个内部文件夹并进行比较)。
有什么方法可以实现这一点。
$dir1 = Get-ChildItem -Recurse -path C:\dir1
$dir2 = Get-ChildItem -Recurse -path C:\dir2
Compare-Object -ReferenceObject $dir1 -DifferenceObject $dir2
如何运行 PowerShell 脚本 解释了如何在脚本中运行上面的代码。
Compare-Object
是PowerShell中的通用对象比较函数。@kirill非常聪明地使用它,通过提供两个路径数组来使用它,每个数组都是使用Get-ChildItem
获取的。将-Force
添加到Get-ChildItem
以包含隐藏的文件系统条目。 - Tomáš Hübelbauerrobocopy
和/L
,正如@dansmith65所提到的,可以立即产生结果。我比较了两个60Gb的目录。 - marckassay/s
来递归子目录,并省略了/b
,这样可以比较文件的时间和日期。(当然,每个"Directory of"行都是不匹配的,因为目录名不同。) - Bob Steindir /s /b > out.txt
正好做到了我想要的。 - roman m这不一定比已经提到的其他选项更好,但它可能更适合某些用例。在我的情况下,我想看看有什么不同,然后再从一个目录复制这些差异到另一个目录。由于 /L
选项只记录会发生什么,所以这种方法非常适合这种情况。
robocopy C:\dir1 C:\dir2 /MIR /FP /NDL /NP /L
你可以使用其他标志进一步完善输出格式,或更改用于比较的逻辑等。有关所有选项,请参阅robocopy文档。
/XO /XN
以忽略旧文件/新文件。
如果需要列出目录中的差异(即使是空目录),请删除 /NDL
。 - Vasiliy Zverev我们多年来一直在使用 Beyond Compare,它非常有用。您可以看到哪些文件是相同的,哪些文件只在文件夹“ A”中,哪些文件只在文件夹“ B”中以及不同的文件(对于这些文件,您可以查看所做的特定修改)。
FreeFileSync 对我来说完成了这项工作。