在Windows上比较2个文件夹树的最佳方法是什么?

时间:2010-09-27 13:12:26

标签: comparison

我正在将一个存储库从sourcesafe转移到subversion,我需要确保关键点是平等的。是否有任何现有的Windows命令/工具允许我比较它们相同的两个文件夹树(具有相同的文件夹结构和相同内容的文件)?理想情况将是命令行:

some_cool_compare c:\current_vss c:\current_svn -exclude .svn;*.vspscc;*.scc

是否存在某些工具/命令或我需要编写自己的脚本?

8 个答案:

答案 0 :(得分:41)

如果您可以使用GUI工具,我尝试的最好的是WinMerge - 开源。

如果没有,那么diff就是你的朋友。

答案 1 :(得分:30)

Beyond compare允许您这样做以及更多。

这是我不能没有的工具之一 查看here以获取脚本选项的参考

答案 2 :(得分:9)

您还可以在两个文件夹中执行tree > tree.txt,然后使用任何基于文件的差异工具(git diff)对两个tree.txt文件进行区分。

答案 3 :(得分:8)

由于我不愿意在我的机器上安装新程序,因此这个PowerShell脚本(来自Hey, Scripting Guy! Blog)帮助我解决了我的问题。我只修改了适合我案例的路径:

$fso = Get-ChildItem -Recurse -path F:\songs
$fsoBU = Get-ChildItem -Recurse -path D:\songs
Compare-Object -ReferenceObject $fso -DifferenceObject $fsoBU

答案 4 :(得分:4)

loc是来自Microsoft的免费应用程序,预览"比较两条路径的模式。例如:

SyncToy

然后,您可以选择三种模式中的一种("同步"," Echo"" Contribute")以解决差异。

最后,它附带{{1}},用于从CLI或计划任务创建和同步文件夹对。

答案 5 :(得分:3)

您可以将git用于此目的。基本上,您在文件夹A中创建了一个git存储库(存储库位于A/.git),然后将A/.git复制到B/.git,然后更改为B文件夹,简单地通过运行git diff进行比较。 使用--exclude可以实现.gitignore功能。

所以,坚持你的例子(但在Linux上使用bash shell):

# Create a Git repo in current_vss
pushd current_vss
printf ".svn\n*.vspscc\n*.scc" >> .gitignore
git init && git add . && git commit -m 'initial'
popd

# Copy the repo to current_svn and compare
cp -r current_vss/.git* current_svn/
pushd current_svn
git diff

答案 6 :(得分:1)

与OP一样,我一直在寻找一个Windows文件夹差异工具,特别是可以处理非常大的树(100千兆字节数据)的工具。感谢Lieven Keersmaekers指向BeyondCompare的指针,我发现它比我以前的旧学校工具windiff非常快(大约快10到100倍)。

除了GUI之外,BeyondCompare确实有一个命令行模式。

答案 7 :(得分:1)

您尝试过: https://www.araxis.com/merge/index.en 它允许可视化更改并有选择地合并文件和文件夹中的特定差异。

相关问题