WinMerge 过滤器(Filters)完全指南:用 .flt 文件控制文件与目录差异比较范围
桌面应用开发工具【免费下载链接】winmergeWinMerge is an Open Source differencing and merging tool for Windows. WinMerge can compare both folders and files, presenting differences in a visual text format that is easy to understand and handle.项目地址https://gitcode.com/gh_mirrors/wi/winmerge点击查看免费下载导读WinMerge 的文件过滤器Filters是一套基于正则表达式的规则集合用于在文件比较与目录比较中只比较特定类型的文件或从目录差异中排除特定类型的文件。本文以仓库 Filters 目录下的模板与预置过滤器为骨架结合 Src/FileFilter.cpp、Src/FileFilterMgr.cpp、Src/FileFilterHelper.cpp 等源码系统讲解.flt过滤器的文件格式、全部指令前缀、包含/排除语义、正则匹配原理与加载目录帮助你编写出可直接投入实战的自定义过滤器。过滤器是什么WinMerge 的过滤器是一组运行时文件过滤规则。正如 Filters/README.md 所述它们允许用户只对某些类型的文件执行差异比较例如只比较.cpp/.h源码文件从目录差异中排除某些类型的文件例如排除*.obj、*.pdb等构建产物与.git、.svn等版本控制元数据目录。过滤器的核心载体是.flt格式的过滤器文件它由一段段“正则表达式 指令前缀”组成被 WinMerge 解析为内存中的规则对象在目录扫描阶段逐项判定文件与目录是否进入比较流程。过滤器的分发位置这些过滤器随 WinMerge 一起分发位于可执行文件下方的Filters子目录中。仓库中 Filters 目录下的全部.flt文件如Merge_VC_loose.flt、Merge_GnuC_loose.flt、XML_html.flt、CSharp_loose.flt等即对应这一运行时布局。从源码看实际加载路径不止一处详见下文「过滤器的加载目录」。.flt 过滤器文件语法编写过滤器的最佳起点是官方模板 Filters/FileFilter.tmpl它完整定义了语法骨架## This is a directory/file filter template for WinMerge name: ${name} desc: Longer description ## Select if filter is inclusive or exclusive ## Inclusive (loose) filter lets through all items not matching rules ## Exclusive filter lets through only items that match to rule ## include or exclude def: include ## Filters for filenames begin with f: ## Filters for directories begin with d: ## To exclude some of the files that match the f: pattern, specify f!: ## To exclude some of the folders that match the d: pattern, specify d!: ## (Inline comments begin with ## and extend to the end of the line) f: \.ext$ ## Filter for filename d: \\subdir$ ## Filter for directory头部元数据指令指令含义说明name:过滤器显示名称显示在 WinMerge 的过滤器下拉列表中缺省时以文件名作为默认名称desc:过滤器描述用于说明该过滤器的用途def:默认包含/排除语义取值见下表缺省为includedef:指令取值在解析源码 Src/FileFilterMgr.cpp 中有明确定义大小写不敏感取值语义include/yes/1宽松inclusive过滤器默认放行所有未命中规则的项目exclude/no/0严格exclusive过滤器默认只放行命中规则的项目规则前缀与正则表达式每条过滤规则由前缀 正则表达式组成模板中明确列出的前缀如下前缀作用对象含义f:文件匹配文件名/路径的包含规则d:目录匹配目录名的包含规则f!:文件排除规则在f:命中后进一步剔除指定文件d!:目录排除规则在d:命中后进一步剔除指定目录注释规则以##开头的行是整行注释行内##前面有空白起至行尾的内联注释同样被忽略这正是模板第 15 行所说明的约定。解析器 Src/FileFilterMgr.cpp 中的RemoveComment函数严格实现了这一行为只剔除前导空白后以##开头或由空白分隔的##注释段。正则表达式采用PCRE 语法由 Poco 库的Poco::RegularExpression编译执行。在 Src/FileFilter.cpp 中可以看到编译时固定附加了两个选项RE_CASELESS匹配时忽略大小写RE_UTF8按 UTF-8 编码处理文本。若表达式非法会记录FILTER_ERROR_INVALID_REGULAR_EXPRESSION错误并跳过该规则而不会导致整个过滤器加载失败。从源码看解析与匹配原理解析器一行一指令过滤器文件由 FileFilterMgr::LoadFilterFile 逐行解析除name:/desc:/def:外它还支持模板之外的更多前缀完整清单如下前缀归属规则列表说明f:文件包含正则见上文d:目录包含正则见上文f!:文件排除正则见上文d!:目录排除正则见上文fe:文件表达式过滤器基于属性表达式的文件规则de:目录表达式过滤器基于属性表达式的目录规则e:文件目录表达式过滤器同时加入文件与目录表达式列表fe!:/de!:/e!:对应排除列表带!的表达式排除变体每行解析时都会记录行号出错时错误信息中会携带行号、错误位置、出错源码文本与上下文见 Src/FileFilter.h 中的FileFilterErrorInfo结构便于定位问题行。匹配语义包含/排除的求值顺序文件或目录最终是否被放行由 FileFilter::TestFileNameAgainstFilter 等函数决定其核心逻辑为若文件名命中包含规则列表filefilters则进入下一步判断若此时存在排除规则filefiltersExclude且也命中则该文件被排除否则返回!default_include——即def: include时命中规则的项目被排除def: exclude时命中规则的项目被放行未命中任何规则的项目一律按default_include处理。目录判定走同构的 TestDirNameAgainstFilter。值得一提的是FileFilterElement构造时若正则中不含反斜杠与://字符会被标记为_fileNameOnly匹配时仅对文件名而非完整路径求值见 Src/FileFilter.h这使f: \.cpp$这类规则既能匹配根目录文件也能匹配子目录中的同名文件。表达式过滤器引擎fe:/de:/e:系列前缀对应 Src/FilterEngine 子项目——一个独立的表达式解析与求值引擎词法分析器由 FilterLexer.re 生成语法解析由 FilterParser.y 描述表达式在 FilterExpression.cpp 中被解析为语法树并求值。错误码体系定义在 Src/FilterEngine/FilterError.h涵盖未知字符、未闭合字符串、语法错误、无效正则、除零错误、非法属性名等 16 种情形。这类表达式可基于文件属性如大小、时间戳、行数做条件过滤是纯正则之外的能力补充。过滤器的加载目录与使用入口加载路径FileFilterHelper::LoadAllFileFilters 定义了过滤器的全部查找位置按序去重加载程序安装目录下的Filters子目录全局过滤器即 README 所述的分发位置%APPDATA%\WinMerge\Filters用户级过滤器我的文档\WinMerge\Filters用户级过滤器用户在选项对话框中自定义的过滤器目录。加载时以* 扩展名.flt作为通配模式扩展名常量定义于 Src/FileFilterHelper.hFileFilterMgr::LoadFromDirectory会扫描目录中所有匹配的.flt文件并逐个解析。此外ReloadUpdatedFilters 会通过比较文件修改时间与大小自动重载被编辑过的过滤器文件无需重启程序。在界面中的入口在 WinMerge 的目录比较视图中可通过过滤器下拉框/工具栏选择当前生效的过滤器选中Visual C loose之类的预置过滤器即可即时排除构建产物选择XML/HTML Devel这类def: exclude的严格过滤器则只比较 XML/HTML 开发者关心的文件类型。预置过滤器实战解析仓库 Filters 目录内置了一批可直接使用的过滤器覆盖常见开发场景Visual C loose宽松型排除 VC 构建产物Merge_VC_loose.flt 以def: include开头集中排除 Visual C 源码树中的各类二进制与中间文件例如f: \.aps$ ## VC Binary version of resource file, for quick loading f: \.obj$ ## VC object module file f: \.pdb$ ## VC program database file (debugging symbolic information) f: \.sdf$ ## SQL Server Compact Edition Database File f: \.VC.db$ ## VS Solution Database File目录部分则排除了版本控制与 IDE 工作区目录d: \\\.svn$ ## Subversion working copy d: \\\.git$ ## Git directory d: \\\.vs$ ## A hidden folder that stores .suo and *.db files d: \\ipch$ ## Intellisense cache for precompiled header file注意目录正则中的\\转义在 PCRE 中匹配路径分隔符\需要写成\\因此\\\.svn$实际匹配以.svn结尾的目录名。GNU C loose宽松型排除 GCC 构建产物Merge_GnuC_loose.flt 是同一思路的 GNU C 版本规则更精简f: \.o$ f: \.lib$ f: \.bak$ ## backup d: \\\.git$ ## Git directory d: \\\.hg$ ## Mercurial repositoryXML/HTML Devel严格型仅放行匹配文件XML_html.flt 演示了def: exclude的用法——默认拒绝一切只放行规则中列出的文件类型def: exclude f: \.xml$ ## XML files f: \.html$ ## HTML files f: \.css$ ## CSS style files f: \.js$ ## Java-script d: \\*$ ## Subdirectories其中d: \\*$用于放行所有子目录从而允许递归进入下层目录继续扫描这是严格型过滤器必须搭配的典型写法。Visual C# looseCSharp_loose.flt 在 VC 过滤器基础上补充了 C# 项目特有产物并排除了bin、obj输出目录f: \.cache$ f: \.resource$ ## Compiled resource file. d: \\bin$ ## binary files directory d: \\obj$ ## object files directory编写自定义过滤器的建议复制模板起步以 Filters/FileFilter.tmpl 为骨架填写name、desc并明确def: include或def: exclude。文件用f:、目录用d:文件规则匹配名称或路径目录规则匹配目录名二者不可混用需要“宽进严出”时用f!:/d!:追加排除。正则务必锚定文件名规则习惯以$结尾如\.obj$避免误伤my.obj.txt之类的文件。注意反斜杠转义匹配目录分隔符或 Windows 路径时\在正则中需写作\\如d: \\bin$。保存位置放入用户级目录%APPDATA%\WinMerge\Filters或我的文档\WinMerge\Filters即可被自动加载无需改动程序安装目录。即时生效修改已加载的.flt文件后WinMerge 会在检测到文件时间戳或大小变化时自动重载见 ReloadUpdatedFilters。校验语法非法正则与表达式错误会被记录为带行号的错误信息可通过过滤器相关对话框查看错误清单GetErrorList据此逐行修正。小结WinMerge 的过滤器系统以.flt文本文件承载规则通过f:/d:系列前缀与 PCRE 正则控制文件、目录的包含与排除并以def: include|exclude决定整体语义解析与匹配由 FileFilterMgr.cpp 与 FileFilter.cpp 在目录扫描阶段逐项执行。掌握模板语法、预置过滤器写法与加载目录规则即可针对任意项目定制差异比较范围让目录比较结果聚焦于真正关心的源码文件。赞分享桌面应用开发工具【免费下载链接】winmergeWinMerge is an Open Source differencing and merging tool for Windows. WinMerge can compare both folders and files, presenting differences in a visual text format that is easy to understand and handle.项目地址https://gitcode.com/gh_mirrors/wi/winmerge点击查看免费下载相关推荐告别冗余文件干扰WinMerge文件夹比对过滤器完全指南告别冗余文件干扰WinMerge文件夹比对过滤器完全指南 在使用WinMerge进行文件夹比对时你是否经常被大量无关文件如日志、缓存、编译产物淹没导致桌面应用开发工具WinMerge命令行参数完全指南高效文件与目录比较技巧WinMerge命令行参数完全指南高效文件与目录比较技巧 前言 WinMerge作为一款强大的开源文件比较和合并工具其命令行功能为自动化处理和集成提供了极大桌面应用开发工具本地AI文件整理终极指南简单三步让杂乱文件变整洁本地AI文件整理终极指南简单三步让杂乱文件变整洁 还在为电脑里杂乱无章的文件而烦恼吗Local File Organizer 是一款完全本地的AI智能文件管人工智能AI 应用本地部署上一篇MediaMTX与物联网集成传感器数据与视频流的融合方案下一篇TDDD实战教程从安装到运行PHPUnit测试的5分钟快速入门创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

用MCP搭建AI驱动的吉卜力风格影视分镜脚本自动化生产系统:TaoToken统一Key接入与config.toml配置实战

用MCP搭建AI驱动的吉卜力风格影视分镜脚本自动化生产系统:TaoToken统一Key接入与config.toml配置实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 2:59:30 阅读更多 →
方波控制还是FOC?BLDC电机驱动方案选型的关键维度和实战经验

方波控制还是FOC?BLDC电机驱动方案选型的关键维度和实战经验

之前带队给一家做水泵的客户做方案评审,两拨工程师差点在会议室吵起来。一方坚持用方波控制,理由是项目周期只有六周、硬件已经定型、MCU是八毛钱一颗的Cortex-M0;另一方力推FOC,说客户明确要求噪声低于40分贝,方波那个…

2026/9/25 2:58:30 阅读更多 →
入职背调怎么做?撕开简历包装,规避招聘风险的必修课

入职背调怎么做?撕开简历包装,规避招聘风险的必修课

你手上拿着两份简历,一份写着“某某互联网大厂高级工程师,主导过千万级用户项目”,另一份写着“某某公司项目负责人”,面试表现也都不错。但你心里清楚,这两个人的真实履历,可能和纸面上写的差了十万八千里…

2026/9/25 2:58:30 阅读更多 →

最新新闻

ng-zorro-antd CheckList 任务清单组件:顺序流程引导的完整使用指南

ng-zorro-antd CheckList 任务清单组件:顺序流程引导的完整使用指南

UI组件前端 【免费下载链接】ng-zorro-antd Angular UI Component Library based on Ant Design 项目地址: https://gitcode.com/gh_mirrors/ng/ng-zorro-antd 点击查看 免费下载 CheckList(任务清单)是 ng-zorro-antd 内置的“特色组件”&a…

2026/9/25 3:42:57 阅读更多 →
本地优先与数据可控:高效文档处理与文件管理工具推荐

本地优先与数据可控:高效文档处理与文件管理工具推荐

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 3:42:56 阅读更多 →
SQL Server 性能计数器评估指南:SQL Assessment API 中 Performance Probe 的配置、数据变换与多实例实战

SQL Server 性能计数器评估指南:SQL Assessment API 中 Performance Probe 的配置、数据变换与多实例实战

示例工程数据库教程后端 【免费下载链接】sql-server-samples Azure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge 项目地址: https://gitcode.com/gh_mirrors…

2026/9/25 3:42:56 阅读更多 →
8款AI论文写作工具实测:从选题到降重的完整辅助方案

8款AI论文写作工具实测:从选题到降重的完整辅助方案

每年三四月份,我都能在私信里收到大量本科生发来的同款求助:“学长,开题报告憋不出来怎么办”“综述全是复制粘贴,查重率快40%了”“导师说我文献综述没有逻辑,但我已经写了三天”。毕业论文这件事,说难不难…

2026/9/25 3:42:56 阅读更多 →
WeiXinMPSDK 性能优化实战指南:从启动阻塞到高并发稳定的 v16.21.0 演进

WeiXinMPSDK 性能优化实战指南:从启动阻塞到高并发稳定的 v16.21.0 演进

后端即时通讯金融科技 【免费下载链接】WeiXinMPSDK 微信全平台 .NET SDK, Senparc.Weixin for C#,支持 .NET Framework 及 .NET Core、.NET 10.0。已支持微信公众号、小程序、小游戏、微信支付、企业微信/企业号、开放平台、JSSDK、微信周边等全平台。 …

2026/9/25 3:42:56 阅读更多 →
PaddleSpeech C++ Runtime 部署 U2/U2++ 流式 ASR:wenetspeech 静态模型推理与 CER 评测实战

PaddleSpeech C++ Runtime 部署 U2/U2++ 流式 ASR:wenetspeech 静态模型推理与 CER 评测实战

人工智能语音音频NLP媒体生成 【免费下载链接】PaddleSpeech Easy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation …

2026/9/25 3:41:56 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →