ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ExtDiff 命令行 Word 文档对比完全指南:安装、快速上手与 Git 集成

ExtDiff 命令行 Word 文档对比完全指南:安装、快速上手与 Git 集成

ExtDiff 命令行 Word 文档对比完全指南:安装、快速上手与 Git 集成

【免费下载链接】ExtDiffCompare documents using MS Word from the command line.项目地址: https://gitcode.com/gh_mirrors/ex/ExtDiff

作为编辑、产品经理或经常审核文档的开发者,你可能常面对两份看似相同的 Word 文档,却要逐字逐句找出改动。ExtDiff 正是为解决这个痛点而生:这是一个通过命令行调用 Microsoft Word 内置对比功能的开源脚本,让你用一条命令完成 .docx 文档差异对比,甚至能让git diff直接弹出 Word 对比窗口。

一、先搞清一件事:为什么需要给 Word 文档写一个 diff 工具

常见代码仓库里的 diff 工具对.txt、代码文件很友好,但面对.docx这类二进制格式就无能为力——git diff只会告诉你"两个二进制文件不同",却说不清哪里不同。而 ExtDiff 的思路很朴素:既然 Microsoft Word 本身就带"比较文档"功能,那就用 PowerShell 脚本通过 COM 自动化把它调用起来,把"打开 Word → 点审阅 → 比较 → 选文件"这一串手动操作,压缩成一行命令。

项目主体只有两个 PowerShell 脚本和三个批处理入口,全部源码就在项目根目录下:

  • Diff-Word.ps1:命令行对比核心脚本
  • Gui-Diff-Word.ps1:图形界面脚本(支持拖拽)
  • diff-word.cmddiff-word-wrapper.cmdstart-gui.cmd:三个批处理入口

它不依赖任何第三方包,只借力 Windows 自带环境,所以安装成本极低。

✅ 本节小结:ExtDiff 用 COM 自动化驱动 Word 原生比较功能,把繁琐的手动对比变成一条命令,专门解决二进制文档在普通 diff 工具中"看不见差异"的问题。

二、运行前准备:Windows + Word + PowerShell 三件套

ExtDiff 的环境前提很简单,一共三条,缺一不可:

  1. 操作系统:Windows。COM 自动化和 Word 都是 Windows 生态的产物,脚本不做跨平台支持。
  2. Microsoft Word:任意较新版本即可(Office 2016 及以上体验最佳)。脚本启动的是本机安装的 Word,Word 越新,对比渲染效果越好。
  3. PowerShell:Windows 10/11 自带 5.1,无需额外安装。

确认环境后,把项目拿到本地。在你想存放的目录下执行:

git clone https://gitcode.com/gh_mirrors/ex/ExtDiff

克隆完成后,你可以先花一分钟浏览一下项目根目录的Readme.md,里面是官方最简用法说明。整个项目没有构建步骤,不需要编译,拿到即可用。

✅ 本节小结:只需 Windows 系统、已安装的 Word 和一个终端,克隆项目后零构建直接使用,这是 ExtDiff 上手门槛极低的关键。

三、三分钟快速上手:跑通你的第一次 Word 对比

准备好两份内容略有差异的 Word 文档,比如旧版.docx新版.docx。在项目根目录打开 PowerShell 或 CMD,执行下面这条命令:

powershell -File Diff-Word.ps1 旧版.docx 新版.docx

执行后你会看到 Word 窗口自动弹出,并直接进入"比较结果"视图:修订标记、增删内容一目了然。如果不想每次都敲powershell -File,更省事的方式是直接用项目自带的批处理入口:

diff-word.cmd 旧版.docx 新版.docx

两种方式效果完全一致。预期效果就是 Word 原生"审阅 → 比较"功能打开的对比窗口,区别只在于全程不需要你手动操作。

如果你不习惯敲命令,项目还提供了图形界面方案,运行:

start-gui.cmd

窗口会自动置顶,从资源管理器把旧文档拖到第一个输入框、新文档拖到第二个输入框,点击Compare即可开始对比;点Clear清空输入并恢复置顶状态,方便连续对比多组文档。

✅ 本节小结:一条diff-word.cmd 旧文件 新文件就能触发 Word 对比窗口;拖拽式 GUI 入口start-gui.cmd让非命令行用户也能零学习成本上手。

四、核心功能拆解:命令行、GUI 与 Git 集成三合一

下面按"能做什么 → 怎么用 → 效果如何"的顺序,把三大功能逐一讲透。

4.1 命令行对比:最轻量的调用方式

这是 ExtDiff 的基础能力,核心逻辑写在Diff-Word.ps1里,总共不过几十行。它的工作流程是:解析两个文件参数 → 解析为绝对路径 → 检查只读属性 → 通过New-Object -ComObject Word.Application启动 Word → 调用文档的Compare方法。

脚本里最关键的一段调用如下:

$word = New-Object -ComObject Word.Application $word.Visible = $true $document = $word.Documents.Open($BaseFileName, $false, $false) $document.Compare($ChangedFileName, [ref]"Comparison", [ref]$wdCompareTargetNew, [ref]$true, [ref]$true)

Compare方法的第一个参数是新版文件,第二个参数是修订者署名(这里固定为 "Comparison"),后面的参数控制对比目标与合并方式。对比完成后脚本会主动关闭原始文档,只保留比较结果窗口,避免屏幕上一堆窗口堆积。

使用建议:把diff-word.cmd所在目录加入 PATH,之后在任何目录都能直接调用,配合文件管理器或脚本批处理,可以轻松实现"批量对比多个文档"。

4.2 GUI 拖拽对比:为不敲命令的人准备

Gui-Diff-Word.ps1用 Windows Forms 画了一个 600×162 的小窗体,两个多行文本框都开启了AllowDrop,所以你甚至不需要输入路径,把文件从资源管理器拖进去即可。它的对比逻辑与命令行版本共用同一套 COM 调用,保证两种入口行为一致。

这里有一个小细节值得注意:窗体默认TopMost = $true保证置顶便于拖拽,但点击 Compare 后会先置为$false,避免对比窗口弹出时被这个小窗挡住;点 Clear 再恢复置顶。整个交互设计是针对"反复对比多个文档"的真实工作场景优化的。

4.3 Git 集成:让 git diff 直接打开 Word 对比

这是 ExtDiff 最受欢迎的能力,也是把它接入日常开发工作流的关键。配置完成后,在仓库里执行git diffgit diff HEAD~1 HEAD -- 某文档.docx,不再输出无意义的二进制提示,而是直接弹出 Word 对比窗口。

实现原理藏在diff-word-wrapper.cmd里,它只有一行:

%~dp0/diff-word.cmd %2 %5

git diff调用外部 diff 工具时会依次传入 7 个参数,其中第 2 个是旧文件、第 5 个是新文件,这个 wrapper 的作用就是把这些参数翻译成diff-word.cmd需要的"旧文件 新文件"格式。具体配置方法见下一节。

✅ 本节小结:三大功能共享同一套 COM 对比内核:命令行适合脚本化和批处理,GUI 适合人工快速比对,Git 集成则把 Word 对比无缝嵌入了版本控制流程。

五、个性化配置:Git 集成与"修改前/修改后"对比

Git 集成需要改动两个配置文件,以"配置前 vs 配置后"来展示会更直观。

5.1 配置 .gitattributes:告诉 Git 哪些文件用 Word 对比

在仓库根目录新建或打开.gitattributes,加入一行:

*.docx diff=word

如果你希望所有仓库都生效,可以在主目录创建一个全局.gitattributes,然后执行:

git config --global core.attributesfile ~/.gitattributes
  • 修改前:.docx没有定义 diff 驱动,git diff输出Binary files a/xxx.docx and b/xxx.docx differ,毫无信息量。
  • 修改后:Git 会把.docx交给自定义的worddiff 驱动处理,对比窗口随之弹出。

5.2 配置 .gitconfig:指定对比命令的落点

打开主目录下的.gitconfig(没有就新建),追加如下配置,并把<pathToExtDiffFolder>替换成你克隆 ExtDiff 的实际路径:

[diff "word"] command = <pathToExtDiffFolder>/diff-word-wrapper.cmd
  • 修改前:[diff "word"]未定义,即使有.gitattributes规则,Git 也会提示找不到 diff 驱动。
  • 修改后:Git 收到旧、新两个文件的路径参数,经diff-word-wrapper.cmd转手,最终交给diff-word.cmd触发 Word 对比。

建议用绝对路径填写,并注意路径中的反斜杠。完成后在仓库里随便改一个.docx再执行git diff验证,看到 Word 弹出即为配置成功。

✅ 本节小结:Git 集成只需改两个文件——.gitattributes声明文件类型,.gitconfig指向 wrapper 脚本,配置前后对比的本质是从"看不懂二进制"变成"弹出可视化对比"。

六、常见问题与避坑:新手最容易踩的四个坑

结合脚本源码和实际使用场景,这里整理四个高频问题:

  1. PowerShell 执行策略拦截脚本。默认策略下直接运行.ps1可能报"禁止运行脚本"。临时方案是在命令前加-ExecutionPolicy Bypass,或执行Set-ExecutionPolicy RemoteSigned后按提示确认。批处理入口不受影响,因为diff-word.cmd内部已经用powershell.exe -File方式调用了。

  2. 目标文件处于只读或占用状态。脚本里专门有一段逻辑:对比前检测基础文件是否只读,是则先解除只读再传给 Word,否则 Word 无法对只读文件执行比较。如果你依然遇到报错,先确认文件没有被 Word 或其他程序占用。

  3. Word 未安装或 COM 注册异常。脚本启动 Word 依赖 COM 组件,如果本机只有 WPS 或精简版 Office,New-Object -ComObject Word.Application会直接失败。解决办法是安装完整版 Microsoft Word,并在任意 PowerShell 里执行同样的New-Object命令验证 COM 可用。

  4. Git 集成后 diff 没反应。九成情况是.gitconfig里路径写错,或.gitattributes没生效。排错顺序建议是:先确认.gitattributes在仓库根目录、再确认.gitconfig路径是绝对路径、最后在项目根目录执行git check-attr diff -- 你的文档.docx检查规则是否命中。

✅ 本节小结:执行策略、文件占用、Word COM 缺失、Git 路径错误是四大高频坑,按上述建议逐个排查即可快速恢复。

七、结尾回顾

ExtDiff 用不到百行代码,把 Word 原生的文档对比能力封装成了命令行、GUI 拖拽和 Git 集成三种调用方式——从此告别"两份 docx 不知道改了什么"的窘境。如果你需要更深入的内容,可以继续阅读项目内的这些文件:

  • 变更历史与版本演进:CHANGELOG.md
  • 开源许可说明(MIT 协议):License.md
  • 命令行对比脚本源码:Diff-Word.ps1
  • 图形界面脚本源码:Gui-Diff-Word.ps1
  • 官方最简说明文档:Readme.md

一句话记住它:ExtDiff = 用 Word 自己的比较引擎,覆盖你从终端到 Git 的全部 Word 文档对比场景。

【免费下载链接】ExtDiffCompare documents using MS Word from the command line.项目地址: https://gitcode.com/gh_mirrors/ex/ExtDiff

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表