要搜索一个文件夹中 PDF 和 Word 文件的文字,请用 MD Factory 将文件夹转换为 Markdown,然后搜索 Markdown 文件。每个文件都是保存在原文件旁边的纯文本,所以 Visual Studio Code 或 PowerShell 可以一次在所有文档中找到某个短语,并显示它所在的行。

转换一次,想搜多少次都可以。扫描 PDF 也能搜索,因为它们的文字在转换时已被识别。

一个黄铜放大镜放在一叠打印的纸页上,旁边有一支淡紫色铅笔。
一次搜索覆盖文件夹中的所有文档。

转换文件夹

  1. 打开 MD Factory,点击添加文件夹,或将文件夹拖到窗口中。其子文件夹也会包含在内。
  2. 转换会立即开始。等到每一行都显示已完成、需要检查或失败。
  3. 点击文件旁边的需要检查可查看要核对的内容。对于扫描件,常见原因是 OCR 没能读出文字,而搜索找不到没有被读出的内容。
Contracts/
  supplier-2025.pdf
  supplier-2025.md
  supplier-2026.docx
  supplier-2026.md
  Scans/
    lease.pdf
    lease.md

混合文件的文件夹也可以:PDF、Word、PowerPoint、Excel、电子书、保存的网页和邮件都会被转换。

搜索范围

文档能找到的内容找不到的内容
带文字的 PDF正文、标题和表格单元格页码,因为 Markdown 中没有页码
扫描 PDFOCR 识别出的文字OCR 读错或无法读取的文字
Word正文、标题和表格脚注、尾注、页眉和页脚
PowerPoint幻灯片文字和演讲者备注,包括隐藏的幻灯片图表和 SmartArt
Excel单元格中保存的值公式和单元格批注

包含脚注、尾注、页眉或页脚的 Word 文件会被标记为需要检查。请在原文档中搜索这些部分。

Excel 日期写作 2026-03-15 00:00:00,所以请按这种形式搜索日期。Excel 单元格中的下划线写作代码 _,所以像 order_id 这样的名称存为 order_id:请按这种形式搜索。 Excel 指南 列出了其他变化。

用 Visual Studio Code 搜索

  1. 在 Visual Studio Code 中,依次选择 File、Open Folder,然后选取文件夹。
  2. 按 Ctrl+Shift+F,输入短语。
  3. 要跳过原始文件,请点击搜索框下方的三点按钮,在 files to include 框中输入 *.md。

结果按文件分组,匹配的行显示在各文件名下方。点击某一行,会在该位置打开文件。搜索框右侧的按钮可开启区分大小写 (Alt+C)、全字匹配 (Alt+W) 和正则表达式 (Alt+R)。Visual Studio Code 的 基本编辑指南 介绍了跨文件搜索。

用 PowerShell 搜索

在文件夹中打开 PowerShell:在文件资源管理器中点击地址栏,输入 powershell 并按 Enter。然后运行:

Get-ChildItem -Recurse -Filter *.md | Select-String -Pattern "payment terms" -SimpleMatch -Encoding utf8

每个匹配项都会连同文件名、行号和该行内容一起输出。省略 -SimpleMatch 可使用正则表达式,例如用 2026-0[1-3] 查找 1 月到 3 月的日期。加上 -Context 1,1 可显示每个匹配项前后各一行。

只列出包含该短语的文件:

Get-ChildItem -Recurse -Filter *.md | Select-String -Pattern "payment terms" -SimpleMatch -Encoding utf8 | Select-Object -ExpandProperty Path -Unique

命令中请保留 -Encoding utf8:没有它,Windows PowerShell 可能会读错带重音符号的字母和非拉丁字母。相关选项见 Microsoft 的 Select-String 参考.

搜索多个词或统计匹配数

要查找两个短语中的任意一个,请在正则表达式中用竖线连接:payment terms|late fee。在 Visual Studio Code 中开启正则表达式,或在 PowerShell 中省略 -SimpleMatch。

要查看哪些文档最常提到某个短语,请按文件对匹配项分组:

Get-ChildItem -Recurse -Filter *.md | Select-String -Pattern "late fee" -SimpleMatch -Encoding utf8 | Group-Object Path | Sort-Object Count -Descending | Select-Object Count, Name

要保存结果,请在命令末尾加上 | Out-File results.txt -Encoding utf8。

该用哪个工具

工具适用场景
Visual Studio Code四处查看:点击一条结果,阅读它周围的文字,修改搜索再试一次
PowerShell统计、列出匹配的文件,以及将结果保存到文件

从匹配结果回到原文件

Markdown 文件与其文档同名,所以 supplier-2026.md 对应 supplier-2026.docx。Markdown 中没有页码。要找到页码,请打开原文件,按 Ctrl+F,搜索同一个短语。

依赖匹配结果之前

匹配只说明这段文字在 Markdown 文件中,并不说明它是正确的。引用数字或条款之前,请打开原文件,在那里确认。对于从扫描件识别出的文字,这一点尤其重要。

如果搜索没有结果

  • 减少搜索的词。句子在原文中可能跨行或跨页,较短的短语仍能匹配。
  • 试试其他拼写。OCR 可能把 1 读成 l,把 5 读成 S,所以请搜索可疑字母周围的那一部分。
  • 检查文件的状态。标记为失败的文件没有 Markdown 文件,需要检查则表示可能缺少某些内容。

让搜索保持最新

文档更改后,请重新将其添加到 MD Factory。如果你没有编辑过它的 Markdown 文件,新结果会替换它。如果编辑过,新结果会保存为带编号的副本,例如 supplier-2026 (2).md,搜索会同时找到两者。

如果你在 Obsidian 中记笔记,它的库搜索可以完成同样的事,参见 如何将 PDF 和 Word 文件导入 Obsidian。要让编码智能体搜索同一个文件夹,参见 如何让 Claude Code、Cursor 和 Codex 读取你的 PDF 和 Word 文件.

常见问题

搜索能找到扫描 PDF 中的文字吗?

能,找到的是 OCR 识别出的文字,拼写与识别结果一致。

需要保留原始文件吗?

需要。页码和确切的版面只在原文件中,你还要回到原文件核对匹配结果。