当我在包含多个 .docx 文件的文件夹中搜索单词“计算机”时,Windows 会列出包含该词的文件列表,这很好。
但我想看到的不仅仅是文件名列表。我想查看找到该单词的文件的预览(它可以简单地显示关键字前后的 X 个字符/单词,或完整的句子)。
(我不是在问可以做到这一点的应用程序。我想使用 Windows 搜索功能)
是否可以?
任何解决方案都适合:使用 win 文件资源管理器、cmd 控制台或 PowerShell。
答案1
因此,您在 PowerShell 脚本助手论坛上发布了此问题,这似乎不是 PS 问题/问题,而是一般的 Windows 资源管理器用例问题。
如果您说您在 PS 中执行此操作,那么您必须自己编写。
或者,只需使用 Windows 资源管理器,在设置高级首选项以搜索文件内容后,使用视图菜单进行搜索并利用预览模式,或将该项目固定到资源管理器快速启动栏以方便访问。这将在文件资源管理器列表的右侧为您提供一个可调整大小的拆分窗格。单击文件名,它将显示整个文件内容,具体取决于文件的格式。
演示在这里:
根据 OP 响应进行更新
好的,但是你问的不是现成的东西。你必须自己写,就像我之前说的。
Windows 资源管理器几乎可以搜索任何文件内容,只要您对其进行设置即可,但如果没有预览模式,它不会向您显示预览,预览只是一种使用文件默认应用程序打开文件的工具。
您要求进行搜索,并根据关键字定位到文件中的相应位置。同样,这绝不是 Windows 上现成的功能。
所以,这是一项从头开始编写的工作。我们会帮助您编写代码,但不会为您从头开始编写。好吧,有时如果有人真的很慷慨,就会发生这种情况。然而,这就是顾问的职责所在。
您的代码必须找到文件、关键字,使用文件应用引擎打开文件,然后您必须通过该文件对象模型进行导航,以便在打开后使用关键字进行搜索并找到关键字位置。
这不是即兴的事情。它需要对每个步骤有深入的了解,并调用父应用程序来显示它。所以,这不是即兴的事情。
网络上有很多关于如何针对不同文件类型执行此操作的示例。例如:
$objWord = New-Object -ComObject word.application
$objWord.Visible = $True
$objDoc = $objWord.Documents.Open("C:\temp\test.docx")
$FindText = "document"
foreach ($docrange in $objDoc.Words)
{
if ($docrange.Text.Trim() -eq $FindText)
{
$docrange.highlightColorIndex = [Microsoft.Office.Interop.Word.WdColorIndex]::wdYellow
}
}
现在,这仅适用于 Word。如果您有 Excel、PowerPoint、Visio、PDF(这需要插件)、文本(这是最简单的)等,它们各自都有您必须了解和使用的对象模型。