只需一条命令就能对比两份 Word 文档?ExtDiff 快速上手与 Git 集成教程
只需一条命令就能对比两份 Word 文档?ExtDiff 快速上手与 Git 集成教程
【免费下载链接】ExtDiffCompare documents using MS Word from the command line.项目地址: https://gitcode.com/gh_mirrors/ex/ExtDiff
收到同事发来的"最终版2.0.docx",你一边开着旧文件一边开着新文件来回切换,红着眼睛找改动点——这种痛苦,做过文档协作的人都懂。如果能像git diff一样,一条命令就看出两份 Word 文档的差异呢?ExtDiff 正是为此而生:一个用 PowerShell 调用微软 Word 内置对比功能的小工具,让.docx文档对比变得和代码 diff 一样干脆。下面带你从零跑通它,再把它接进 Git,让版本控制真正管住你的文档。
1. 先搞懂它在解决什么问题
一句话概括:ExtDiff 是"命令行版的 Word 文档对比器"。它自己不做任何文档解析,而是通过 COM 自动化,把"比较文档"这个动作交给 Word 本体去完成。所以你最终看到的对比结果,就是 Word 原汁原味的修订模式——删除的内容划线、新增的内容标色,完全符合你平时用 Word 审阅的习惯。
它主要服务于 Word 系文件(.docx、.doc),特别适合写文档、做合同的团队。如果你只是对比两个纯文本文件,有更轻量的工具可用;ExtDiff 的价值,恰恰在于把"文档人"和"命令行"这两件看似不搭的事连了起来。
2. 3 分钟快速上手:从克隆到看到第一份对比结果
先确认环境,三样缺一不可:
- Windows 系统:脚本依赖 COM 自动化,Linux/macOS 用不了;
- 已安装 Microsoft Word:任意较新版本即可;
- PowerShell:Windows 自带,无需额外安装。
接下来克隆项目:
git clone https://gitcode.com/gh_mirrors/ex/ExtDiff人话:把项目下载到本地,整个仓库只有几个文件,不需要任何安装流程,下载完就能用。
然后对比两份文档,二选一:
diff-word.cmd old.docx new.docx或者直接用 PowerShell:
powershell -File Diff-Word.ps1 old.docx new.docx执行后 Word 会自动启动并打开一个新文档,把old.docx(旧版)和new.docx(新版)之间的差异以修订标记的形式呈现出来,增删改一目了然,对比完成后原文件也不会被改动。到这里,你已经完成了第一次"命令行对比 Word 文档" 🚀
3. 三个核心文件,一句话讲透
项目文件不多,真正需要认识的就三个:
Diff-Word.ps1:真正干活的脚本
它做了三件事:把传入的两个路径解析成绝对路径 → 用New-Object -ComObject Word.Application在后台启动 Word → 调用document.Compare(...)让 Word 执行对比。人话就是,它是个"遥控器",按下按钮让 Word 自己去比较。
脚本里还有两处贴心细节:常量wdDoNotSaveChanges = 0表示对比完不保存原文档;开头会先解除文件的只读属性,因为Word 无法对比只读文件。
diff-word.cmd:给懒人准备的"壳"
.cmd文件不能直接调用.ps1,所以它负责用powershell.exe -File把参数原样转交给脚本,让你在 CMD 里也能舒服地使用。你平时完全可以只记住diff-word.cmd这一条命令。
start-gui.cmd+Gui-Diff-Word.ps1:拖拽版界面
如果你不想记命令,运行start-gui.cmd会弹出一个置顶的小窗口:把两个文件从资源管理器直接拖进输入框,点Compare出结果,点Clear清空重来。界面简单到不能再简单:
对不熟命令行的同事,把start-gui.cmd丢给他就够了。
4. 小实战:让git diff直接对比 docx
这一步 10 分钟能搞定,做完之后,你在 Git 仓库里改动.docx并执行git diff,差异会直接以 Word 对比窗口的形式弹出来,不再是一堆乱码。
第一步:在仓库根目录创建(或修改).gitattributes,加一行:
*.docx diff=word人话:告诉 Git,"所有.docx文件,用名为word的自定义对比工具来处理"。
第二步:编辑家目录下的.gitconfig,追加:
[diff "word"] command = /path/to/ExtDiff/diff-word-wrapper.cmd人话:把word这个名字指向 ExtDiff 的包装脚本,路径换成你电脑上仓库的真实位置。
第三步:改动一个.docx并提交,然后执行git diff验收成果。
这里有个小知识点:git diff传给自定义工具的参数很多,而diff-word-wrapper.cmd只把%2(旧文件)和%5(新文件)转发给了diff-word.cmd——这个"挑参数、转手"的动作,就是它存在的全部意义。
5. 新手最容易踩的 5 个坑
- 没装 Word 或只装了 WPS:脚本通过
Word.Application这个 COM 组件找 Word,WPS 不注册该组件,会直接报错。解决:安装 MS Word 再试。 - PowerShell 提示"禁止运行脚本":被执行策略拦住了。解决:用管理员身份运行
Set-ExecutionPolicy RemoteSigned,或者干脆走diff-word.cmd(CMD 不受该策略限制)。 - 路径带空格或中文报"找不到文件":给路径加上英文双引号即可;脚本内部已用
Resolve-Path解析成绝对路径,还支持~表示主目录。 - 配置好 Git 集成后
git diff没反应:九成是.gitconfig里的command路径写错,或.gitattributes没生效。核对路径是否真实存在,确认文件在仓库根目录。 - 对比结果方向反了:
old放前面、new放后面,顺序颠倒会把增删方向弄反,看起来像"改动回退" ⚠️
6. 现在,去把文档纳管起来吧
ExtDiff 的全部价值可以浓缩成一句话:把专业但琐碎的 Word 文档对比,压缩成一条命令。如果你身处文档驱动的团队,把.docx纳入 Git、再用上这个小工具,整个协作链路会顺畅很多。觉得它好用就顺手点个 Star;想深入了解实现细节,仓库里的 Readme 和 CHANGELOG 记录了它从 2016 年至今的每一步演进,值得一读。
【免费下载链接】ExtDiffCompare documents using MS Word from the command line.项目地址: https://gitcode.com/gh_mirrors/ex/ExtDiff
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
