我正在尝试使用 WinMerge 比较两个目录:
C:\用户...\桌面\比较\35_A
C:\用户...\桌面\比较\35_HS
## This is a directory/file filter for WinMerge
## This filter lets through only files ASP.NET developers care about
name: ASP.NET Devel
desc: Lets through only files ASP.NET developer cares about
## This is an exclusive filter
## (it lets through only matching files)
def: exclude
## Filters for filenames begin with f:
## Filters for directories begin with d:
## (Inline comments begin with " ##" and extend to the end of the line)
f: \.xml$
f: \.xlst$
f: \.xsl$
f: \.xslt$
f: \.dtd$
f: \.html$
f: \.htm$
f: \.css$
f: \.gif$
f: \.bmp$
f: \.jpg$
f: \.png$
f: \.js$
f: \.dll$
f: \.aspx$
f: \.asmx$
f: \.ascx$
f: \.vb$
f: \.resx$
f: \.cs$
f: \.js$
f: \.vbproj$
f: \.csproj$
f: \.sln$
f: \.webinfo$
f: \.config$
d: \\*$ ## Subdirectories
def: exclude
d: \\bin
d: \\obj
最后 3 行不是过滤器的一部分,我添加了它们,因为我试图忽略所有 \bin\ 和 \obj\ 目录中的所有内容。我尝试了和def: include
,def: exclude
但都没有提供准确的结果。
我查看了 WinMerge 中有关文件过滤器的帮助文档,但我不明白。
答案1
包括和排除请参阅比较后文件和文件夹列表中显示的内容。过滤器包括包括和排除列表中的事物。
如果你使用排除过滤器,它从文件列表中排除所有内容不是列在过滤器中。
如果你使用包括过滤器,它包括文件列表中的所有内容不是列在过滤器中。
在您的例子中,您使用的是排除,因此您只会看到您在过滤器中明确列出的文件和文件夹。要阻止bin
和obj
文件夹,您需要知道全部您可能想要查看的其他文件夹,以便它们可以在您的过滤器中列出。
我发现,对于代码来说,使用包含过滤器更简单。这样,我就可以屏蔽掉我不关心的文件夹和文件。
将第一个改为def:
,include
并删除第二个def
。我认为你只能有一个def
。你的d:
规则将是
d: \\bin$
d: \\obj$
答案2
正如其他人提到的,您只能有一行def:
,并且过滤器实际上执行指令的相反操作def:
(即过滤器实际包含文件时def
)exclude
。
因此,有了这些知识,我们可以看到下面一行包括所有子目录。
d: \\*$ ## Subdirectories
我没有安装 WinMerge,也不熟悉其中的 RegEx 引擎,但您可以尝试使用负面查找来包含除“bin”和“obj”之外的所有子目录:
d: ^\\((?!bin|obj)(.+)|(.+)(?<!bin|obj))$
答案3
我对@heavyd 的回答取得了一些有限的成功,但后来发现在 WinMerge 的明显继任者 WinMerge2011 中这要容易得多。
使用 WinMerge2011 我
xd: \\bin(\\.+|)$
xd: \\obj\\
查找文档可能很困难,但我发现 http://forums.winmerge.org/viewtopic.php?f=4&t=1010
WinMerge 2011 中的文件/目录过滤器已得到增强,允许组合包含规则和排除规则。如果在 .flt 文件中省略 def: 标签,则 f: 和 d: 将作为包含规则运行,除非以 x 为前缀,在这种情况下它们将作为排除规则运行。f: 和 d: 标签(同样可选地以 x 为前缀以形成排除规则)也可以与通配符过滤器一起使用。
仅供参考,WinMerge 似乎不再开发。请参阅https://en.wikipedia.org/wiki/WinMerge. 下载 WinMerge2011https://bitbucket.org/jtuc/winmerge2011/downloads/