(From http://hi.baidu.com/04043111/blog/item/c398952596cf176835a80f08.html )
windows XP中文件内容搜索仅能针对部分类型文件
症状
当您使用“文件中的一个字或词组”搜索条件搜索包含文本的文件时,搜索结果中可能没有那些包含您所指定的文本的文件。例如,.log、.dll、.js、.asp、.xml、.xsl、.hta、.css、.wsh、.cpp、.c 或 .h 文件或没有文件扩展名的文件即使含有您所指定的文本,也可能不会出现在搜索结果中。即使您在“全部或部分文件名”框中指定了文件名或文件类型,也可能会发生该问题。原因
对于包含您所指定的文本的文件类型,没有注册筛选器组件;或者,筛选器组件忽略了您所指定的文本。要在使用“文件中的一个字或词组”搜索条件时让搜索结果中包括某个文件类型,必须为该文件类型注册有效的筛选器组件。Windows XP 只为与常见文档类型相关的文件类型注册了筛选器组件。Windows XP 中的标准筛选器组件包括:
Mimefilt.dll:筛选多用途 Internet 邮件扩展 (MIME) 文件
Nlhtml.dll:筛选 HTML 3.0 或更低版本的文件
Offfilt.dll:筛选 Microsoft Office 文件(Microsoft Word、Microsoft Excel 和 Microsoft PowerPoint)
Query.dll:筛选纯文本文件(默认筛选器)和二进制文件(空筛选器)
由于文本的格式或内容方面的原因,筛选器组件可能会忽略某些文本。例如,HTML 3.0 筛选器 (Nlhtml.dll) 会忽略 HTML 文件(例如,扩展名为 .htm 或 .asp 的文件)的注释中包含的文本,因为在浏览器中打开这类文件时未显示此文本。
Microsoft Windows 2000 和更低版本的 Windows 会在所有文件中搜索您指定的内容。Windows XP 并不搜索所有文件,这是为了提高搜索性能和避免得到无关结果。无论您在搜索时是否使用索引服务,搜索操作都是这样进行。
解决方案
方法 1要为其他文件类型解决这一问题,请安装能够为您要搜索的文件类型注册筛选器的程序。如果没有可提供筛选器的程序,可以对文件类型使用纯文本筛选器。为此,请在 HKEY_CLASSES_ROOT 中的文件类型项下添加 PersistentHandler 项,并将它的 (Default) 字符值名称设置为以下值: {5e941d80-bf96-11cd-b579-08002b30bfeb}
警告:如果使用注册表编辑器或其他方法错误地修改了注册表,则可能导致严重问题。这些问题可能需要重新安装操作系统才能解决。Microsoft 不能保证您可以解决这些问题。修改注册表需要您自担风险。
例如,要对 .zzz 文件使用文本筛选器提供程序,则应存在以下注册表设置:
HKEY_CLASSES_ROOT\.zzz\PersistentHandler\(Default) = {5e941d80-bf96-11cd-b579-08002b30bfeb}
将该值添加到注册表中以后,必须注销然后重新登录才能使更改生效。
注意:
纯文本筛选器并非适用于所有文件类型。如果为文件类型添加纯文本筛选器后无效,请与该文件类型的供应商联系,以获取该文件类型的筛选器。
HTML 3.0 筛选器 (Nlhtml.dll) 会忽略在 HTML 文件(例如,扩展名为 .htm 或 .asp 的文件)的注释中包含的文本。要搜索在 HTML 文件的注释中包含的文本,请使用纯文本筛选器或方法 2 中介绍的方法。
要将 Windows XP 配置为能够搜索所有文件(无论文件类型是什么),请获取最新的 Windows XP Service Pack,然后打开“含有未知扩展名的索引文件类型”选项。
如果您使用该方法,Windows XP 会在所有文件类型中搜索您指定的文本。这可能会影响搜索功能的性能。为此,请按照下列步骤操作:
1. 单击“开始”,然后单击“搜索”(或指向“搜索”,然后单击“文件或文件夹”)。
2. 单击“改变首选项”,然后单击“使用制作索引服务(使本地搜索更快)”。
3. 单击“改变制作索引服务设置(高级)”。请注意,您不必打开索引服务。
4. 在工具栏上,单击“显示/隐藏控制台树”。
5. 在左窗格中,右键单击“本机索引服务”,然后单击“属性”。
6. 在“生成”选项卡上,单击以选中“含有未知扩展名的索引文件”复选框,然后单击“确定”。
7. 关闭索引服务控制台。
警告:如果使用注册表编辑器或其他方法错误地修改了注册表,则可能导致严重问题。这些问题可能需要重新安装操作系统才能解决。Microsoft 不能保证您可以解决这些问题。修改注册表需要您自担风险。
网络管理员可以通过修改注册表来配置此设置。为此,请在以下注册表项中将“FilterFilesWithUnknownExtensions”DWORD 值设置为 1:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ContentIndex
XP系统的搜索功能,搜索包含某个字符的文件时,为“提高效率”,取消了对所有文件类型中字符的搜索支持,只有部分文件类型中的字符可以被搜索。
尽管309447补丁或SP1里增加了对很多文件类型中字符的搜索支持,但还是有些文件类型(比如difficult提及的java文件)不能被搜索。
(http://support.microsoft.com/?id=309447)Using the "A Word or Phrase in the File" Search Criterion May Not Work
http://support.microsoft.com/?id=309173
简单的总结一下里面提及的两个方法,供参考:
方法一:如果某个文件类型不支持搜索其中的字符,可以将下述复制到记事本文件(不包括横线),
---------------------------------------
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.cpp\PersistentHandler]
@="{5e941d80-bf96-11cd-b579-08002b30bfeb}"
---------------------------------------
其中,***代表文件的扩展名,需要修改(编辑)成相应的文件扩展名。
编辑后另存为reg类型文件,(文件名称随便取), 双击此文件,导入注册表即可搜索相应扩展名文件中包含的字符。
方法二:运行regedit,编辑注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ContentIndex
右侧FilterFilesWithUnknownExtensions子键(REG_DEWORD类型) 的键值改为1