为何通配符"*.*"与" . "可匹配无扩展名文件"a"?
关于通配符匹配无扩展名文件的两个常见问题解答
问题1:为何通配符*.*能够匹配没有扩展名的文件?
这个得从DOS时代的老规矩说起——Windows的通配符逻辑基本照搬了DOS这套设计。
在早期DOS的文件命名规则里,文件名被拆成文件名主体和扩展名两部分,用点号.分隔,而扩展名完全可以是空的。当我们用*.*作为通配符时,两个*的作用分别是:
- 第一个
*:匹配任意长度的文件名主体(连空字符串都能匹配) - 第二个
*:匹配任意长度的扩展名(同样包括空字符串)
所以对于像a这种无扩展名的文件,它的扩展名部分是空的,刚好能被第二个*匹配上。说白了,*.*本质上是“匹配所有带点号(哪怕点号后面啥也没有)的文件”,而无扩展名的文件就相当于“文件名主体+点号+空扩展名”,自然就被纳入匹配范围了。
后来Windows虽然支持更长的文件名和更灵活的命名规则,但这套通配符匹配逻辑被保留了下来,所以现在用*.*搜索时,依然能看到所有无扩展名的文件。
问题2:某目录下存在文件a,当使用*.作为搜索模式时,会匹配到该文件,但此文件无扩展名且文件名不含点号,请问原因是什么?
(这里我猜你可能是输入时的小失误,应该是*.而不是空格加点点——毕竟空格加点点的模式根本匹配不到不带空格的a文件)
还是DOS遗留的规则在起作用:*.这个模式的核心含义就是“匹配文件名主体任意,但扩展名是空的文件”。
在系统的文件匹配逻辑里,无扩展名的文件会被默认标记为“扩展名部分为空”,哪怕文件名里没有显式的点号。当你用*.搜索时,系统会自动把这类文件和“文件名主体+点号+空扩展名”的模式做匹配——因为空扩展名刚好符合*.里“点号后面没有内容”的要求,所以文件a就被匹配到了。
简单说,*.就是系统专门用来筛选无扩展名文件的通配符模式之一。
内容的提问来源于stack exchange,提问作者Jerry Chou
相关产品推荐
相关产品推荐

