win7搜索文件通配符使用问题(精通者解答)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了win7搜索文件通配符使用问题(精通者解答)相关的知识,希望对你有一定的参考价值。

一知半解者勿入,提问前我已经百度几小时以上,学习专业论坛好几个。举例:先准备一个名为“测试”的文件夹,放有“关于晋升经理的通知”和“干扰文件”这两个doc文档,前者的内容为“关于晋升张三为部门经理的通知”,后者内容随便写。现在,进入测试文件夹,文件夹选项的搜索选项卡中,已勾上“始终搜索文件名和内容”及“查找部分匹配”。下面,我想搜索包含“升张”的文件,于是在搜索框内输入“*升张”,理论上应该找到一个结果啊,但搜索不出来。求解!!!此外,我还想问一下,采用内容方式搜索是否可以使用正则表达式??比如,*升张 OR *扰文* 。最好帮我找一篇或者亲自写一篇专业详尽的win7搜索实例文章(别提everything等第三方软件),而且要实例要包括复杂条件,结合筛选器(这部分我已经比较懂了)和正则表达式搜索文件内容。再次声明,不要乱复制,请高手亲自测试再回答我。你能百度到的,我都已经百度过了!!!
蛋疼的win7文件管理,蛋疼的从左到右段词,非要加通配符,貌似强大的正则表达式,但真正有几个人去严谨地测试过呢!!!
我的核心问题是,搜索文件内容中(非文件标题)包含指定关键字词(而且是非常用词语)的时候,如何正确运用通配符及正则表达式。用自定义筛选器(包括类型大小日期作者等要素)搜索文件名的技巧我已经懂了。
感谢一二楼,大家可以不去看一二楼了,太累。其实,经过自行研究,大概应该是win7词库不能辨别非常用中文词语的缘故,即便加上通配符。但我找不出问题解决办法。请直接严格按照我的例子去测试,以避免遗漏。http://pan.baidu.com/s/1qWz4Sv6

首先对大神们得学习态很是敬佩,小弟应该向你们学习,首先声明下我对于通配符没有什么研究,但是我想从另一个角度来给大家说明下为什么会出现这么奇怪的现象(如有不对,还请各位大神见谅批评指正).最近正好学习了solr全文检索,有一个分词器的概念,就是对要检索的内容进行"分词",比如"关于晋升经理的通知"的分词结果可能是这些->关于 晋升 经理 的 通知(根据习惯我自己分的),而检索就是根据这些分词是否匹配来检索的,当然这只是solr的检索方式,windows的我不知道;正如题主所说,外国人提供的对中文支持确实不好,solr分词器就是这样的情况,solr的标准分词器对中文分词极差(因为外国人开发的),而我们中文一般使用ik分词器.所以关于上面的情况我斗胆猜测"晋升"作为一个分词很常见,但是"升张"显然只能成为"升""张"两个词,我用"张三"/晋升都可以查到.相信聪明的各位在我一塌糊涂的表达下已经知道我想表达的意思了.可以看出来题主是一个对问题很较真的人,愿意思考,所以想【请问一下能不能加个好友,这个应该是你的QQ:幺八五七三七幺五
,吧,如果同意回复我,我再主动加您】。最后还请原谅,我不是题主要求的精通者,但是我也没忍住想发表下自己的想法,当然我也不是来想要什么分的,纯属想和各位大佬一起学习交流,谢谢看完!
参考技术A 使用通配符辅助搜索
虽然从WIN最初版本开始就支持这项功能;但是还是有很多人不熟悉它。下面介绍两个常用的通配符。
1 星号(*): 星号可以在文件中代表任意的字符串。比如搜索*.doc,就可以搜索到系统中所有以 doc 作为后缀的文件。搜索*ese,就可以搜索以ese结尾的所有单词,例如:Chinese,Japanese, etc。
2 问号(?): 问号可以代表文件中的一个字符。
ps:虽然你说的很复杂,但其实很简单,只是你对通配符的理解太少,如题,如果要搜索你说的这这两个文件,应使用 *升张? OR *扰文? 这样的方式!以达到模糊搜索的效果,WIN本身就对中文的所搜不稳定,所以使用中更应该注意细节。追问

你有测试过吗? *升张? OR *扰文? ,意思就是查找包含xx升张xx或者xx扰文xx的文件,理论上应该得到两个结果吧,但是,我测试结果并没有第一个文件!!!我在想,按内容查找中文关键词(非常用词语)是不是不能用*或?这些通配符呢?你的一句“你对通配符理解太少”让我以为遇见了大神。。。。通配符我早学习过了。还请大神继续研究,谢谢!

追答

我可以100%肯定的回答你,是正确的。

而且你理解错了,?是忽略之后的内容包括文件类型的通配符。


追问

感谢你的认真和执着。你注意到没,你犯了个错误。你在拿文件名作测试!!!对于搜索文件名含有指定关键字,win7的搜索表达式没有任何问题,我知道。但,我研究的是按中文(并且是‘非常用词语’)关键字进行文件内容搜索,而非文件名!!
这样,你严格按照我的测试例子去进行!期待高手going !!

追答

不想解释了。太累!见图。

追问

兄弟,别泄气。你知道吗,你的文件名已经包含了“升张”。为什么不严格按照我的例子呢

追答

看错了,复制的你的原文的,

参考技术B 胜日寻芳泗水滨,无边光景一时新。等闲识得东风面,万紫千红总是春。 参考技术C

首先  win7自带搜索没你想象中的强大,然后确定你打开了自然语言搜索和搜索文件内容

追问

感谢关注。我已经说过,打开了搜索文件内容。你的例子中,如果打开了自然语言,就不需要写表达式了吧?而且,你的关键字QQ出现在文件名而非文件内容中,再而且,or应该大写吧???
建议楼下的认真阅读我的问题,最好按照我的例子去亲自实验。如果大家觉得详细回答我太费时的话,就回答我提出的第一个问题就是了。谢谢大神们!!

追答

你试过不打开自然语言的情况下   又写 or  是什么情况吗?

还有,您也可以试下  大小写 or 有没有区别

 

doc文件内容:

追问

不打开自然语言的情况下,小写or是错误写法,本来就该大写。我早测试过了。我关注的是按文件内容搜索,谢谢!
如果对这方面有研究,麻烦大神直接抠抠我:幺八五七三七幺五,这样可以远程演示。

追答

你是对的 

 

只能这样了 帮不了你···

追问

我明白你的测试要求“包含12或者a的doc文档”,win7从左到右断字功能已经能够辨别你的关键字a及12,因为你的关键字是一个非常简短的字而非复杂的中文词,而且文件内容中的a和12前面都有空格,这对win7系统来说,能轻易辨认。但是,(在你的例子中)你试试关键字改为 *试文 AND *.doc,理论上该有一个结果吧?但。。。

追答

 

 

我的结果是可以搜索到的  我用的测试文件也给你看下···  你在  试文 两个字前面不要 星号试试

 

 

 你的测试例子确实找不出来,陪你到这里了···

追问

兄弟,我稍作改动,然后你不变搜索表达式,搜索出来的结果就变成了一个,个中原由你分析下就明白了。貌似我比你还分析得透彻:),你也挺喜欢专研呢。
这是TYUO修改后的内容:
测试文!@!@#@$#@%#^$#qd吃撒啊是大大qwdwfnuwr2149u5093森么
这是WER:
测试文件r214982htni43hti43h6i发在这里3u5093森么测试文

追答

是这样改吗?

 

为什么我总是得两个····

 

追问

我觉得还是有问题,加我q吧,18573715方便传送测试文件。这样沟通太麻烦。

参考技术D 来挖坟了~回复好多没具体看,我大概试了下,搜搜内容和自然语言开启,新建“通知.txt”中输入内容“关于晋升张三为部门经理的通知”,关键字“升张”死活搜不到,一搜“张三”就有了~~~看来对中文搜索不太友好

C++使用通配符查找文件(FindFirstFile)

调用 FindFirstFile 和 FindNextFile 可搜索某个目录下的相应文件。

BOOL SearchFilesByWildcard(WCHAR *wildcardPath)
{
    HANDLE hFile = INVALID_HANDLE_VALUE; 
    WIN32_FIND_DATA pNextInfo;  
 
    hFile = FindFirstFile(wildcardPath,&pNextInfo); 
    if(INVALID_HANDLE_VALUE == hFile)  
    {  
        return FALSE;  
    }  
 
    WCHAR infPath[MAX_PATH] = {0};
    if(pNextInfo.cFileName[0] != '.')
    {
        printf("Find result = %ws\r\n",pNextInfo.cFileName);
    }
 
    while(FindNextFile(hFile,&pNextInfo))  
    {  
        if(pNextInfo.cFileName[0] == '.')
        {
            continue;  
        }
 
        printf("Find result = %ws\r\n",pNextInfo.cFileName);
    }
 
    return FALSE;
}
int main(int argc,char* argv[])
{
    setlocale(LC_ALL,"chs");
 
    //查找 abc开头的txt文件
    printf("Search 1:\r\n");
    SearchFilesByWildcard(L"E:\\Test\\abc*.txt");
    printf("\r\n");
 
    //查找 abc开头的文件
    printf("Search 2:\r\n");
    SearchFilesByWildcard(L"E:\\Test\\abc*");
    printf("\r\n");
 
    //查找jnt文件
    printf("Search 3:\r\n");
    SearchFilesByWildcard(L"E:\\Test\\*.jnt");
    printf("\r\n");
 
    //查找文件名为4个字符的txt文件
    printf("Search 4:\r\n");
    SearchFilesByWildcard(L"E:\\Test\\????.txt");
    printf("\r\n");
 
    //查找包含"档案"的文件
    printf("Search 5:\r\n");
    SearchFilesByWildcard(L"E:\\Test\\*档案*");
    printf("\r\n");
 
    getchar();
    return 0;
}

以上是关于win7搜索文件通配符使用问题(精通者解答)的主要内容,如果未能解决你的问题,请参考以下文章

GNU make 中的递归通配符?

通配符百分号表示啥意思 通配符百分号指啥

MySQL从入门到精通:关于常用like子句中通配符的总结

Gsutil 通配符搜索

DSE:通配符搜索

4-3 linux中find文件搜索命令