关于CMD/DOS中的短文件名规则

最近在制作一个批处理的过程中发现一个很郁闷的问题,就是有些时候搜索到的结果不是我们想要的

比如上图,我要搜索的文件时?ec*.*,也就是说我要搜索第二个字母是e,第三个字母是c的所有文件
而搜索到的结果前两个都正确,但是后面两个就错了,很不理解,最初以为是bat写的问题
后来发现直接在DOS写命令也是一样的,有很多完全不符合的文件,遂百度,才知道怎么回事

星号通配符总是使用短文件名映射,因此,您可能会得到意外的结果

也就是说当使用*通配符后只按照短文件名搜索,而不按照原始长文件名来搜索
我输出了下短文件名后发现果然是这样的:

如图所示可以看到?ec*.*确实匹配的短文件名,看了命令没有执行错误。
但是又一个问题出现了,为什么短文件名是VEXXXX~1这种形式?
接着百度,得到以下结果:

当创建一个长文件名文件时,系统会自动加上对应的短文件名,其一般有的原则:
(1)、取长文件名的前 6 个字符加上"~1"形成短文件名,扩展名不变。
(2)、如果已存在这个文件名,则符号"~"后的数字递增,直到 5。
(3)、如果文件名中"~"后面的数字达到 5,则短文件名只使用长文件名的前两个字母。通过数学操纵长文件名的剩余字母生成短文件名的后四个字母,然后加后缀"~1"直到最后(如果有必要,或是其他数字以避免重复的文件名)。
(4)、如果存在老 OS 或程序无法读取的字符,换以"_"

很明显目前的状况属于第三种情况,但是后面的4位16进制数据是怎么计算得到的还是不太清楚

网上对此解释也有很多,这里也就不再讨论,只是希望在使用过程中了解有这么个机制

会发生结果与预期不符,而不是程序设计错误即可

—— 原文发表于2012-3-11 08:57

时间: 2024-08-16 08:35:08

关于CMD/DOS中的短文件名规则的相关文章

长文件名和短文件名

文件命名时有一个8.3规则 8是指文件名,就是******.XXX里的*** 意思是这个部分不能超过8个字符,在DOS里,如果超过8个字符了是不会被识别的.后面的XXX是扩展名,也不一定非得是三个字符,像网页文件的扩展名可以是htm也可以是html,只不过国际上习惯于用三个字符来做扩展名 "文件名.扩展名"才是一个文件的完整的名字 文件名用来标识一个单独的文件,指的是一个个体,扩展名标识的是一类文件 FAT32系统中长文件名的存储(转) 2011-07-29 16:22:11|  分类

利用URLScan工具过滤URL中的特殊字符(仅针对IIS6)-- 解决IIS短文件名漏洞

IIS短文件名漏洞在windows服务器上面非常常见,也就是利用“~”字符猜解暴露短文件/文件夹名,比如,采用这种方式构造URL:http://aaa.com/abc~1/.aspx,根据IIS返回的错误信息,猜测该路径或文件是否存在,具体可参考这篇文章:http://www.freebuf.com/articles/4908.html. 就单纯的解决这个问题来说,微软的URLScan工具是最适合的一个轻量级工具,关键它是免费的,而且安装.配置非常简单.安装过程就不说了,傻瓜式的. 安装完毕之后

短文件名漏洞修复

短文件名漏洞其实在13年时还是很令人耳熟能详的,不过随着所在公司的编码语言转型,目前使用ASP.NET的新项目基本上没有了,而更多的是对原来的采用ASP.NET语言开发的项目进行维护或打个补丁. 事出突然,12月的某个下午被项目组喊去帮个忙,第一感觉就是"是不是线上的项目被人黑了?".于是乎就跑去看下具体的情况,项目组负责人见到我第一句话就是"某个项目被某国家单位进行线上项目巡检时发现了一个漏洞,但是不会修". 往他所指的电脑上简单一看,映入眼帘的就是"存

DOS中命令的格式

---------------siwuxie095 一.DOS中,命令使用格式的一般形式 用中文表达的形式为: [路径]  关键字  [盘符]  [路径]  文件名  [扩展名]  (参数)  [参数] 用符号表达的形式为: [Path]  关键字  [D:]  [Path]  filename  (ext)  [parm] 关键字必不可少,如DIR命令中的DIR,其他项可有可无,根据需要选定. 盘符,即驱动器号,如A:   B:   C:  D:  E:  F: 等,省略此参数则选择默认驱动器

IIS短文件名漏洞修复

漏洞描述:IIS短文件名泄露漏洞,Microsoft IIS在实现上存在文件枚举漏洞,攻击者可利用此漏洞枚举网络服务器根目录中的文件. 危害:攻击者可以利用"~"字符猜解或遍历服务器中的文件名,或对IIS服务器中的.Net Framework进行拒绝服务攻击. Windows 还以 8.3 格式生成与 MS-DOS 兼容的(短)文件名,以允许基于 MS-DOS 或 16 位 Windows的程序访问这些文件.在cmd下输入"dir /x"即可看到短文件名的效果.通配

iis短文件名漏洞解决方法

Microsoft IIS在实现上存在文件枚举漏洞,攻击者可利用此漏洞枚举网络服务器根目录中的文件.危害:攻击者可以利用"~"字符猜解或遍历服务器中的文件名,或对IIS服务器中的.Net Framework进行拒绝服务攻击. 关闭NTFS 8.3文件格式的支持.该功能默认是开启的,对于大多数用户来说无需开启. 运行cmd,输入fsutil behavior set disable8dot3 1 2.如果是虚拟主机空间用户,可采用以下修复方案:1)修改注册列表HKLM\SYSTEM\Cu

在cmd窗口中显示UTF-8字符

有这么一个文件,它在Eclipse属性中看到是UTF8编码的,里面包含了中文: 但是当在Windows控制台中查看这个文件(为了方便,我将文件拷贝到桌面了)的时候,就是乱码了: C:\Users\002778\Desktop>type abc.sql USE Abc; INSERT INTO `School` VALUES (1,'鍖椾含澶у','鍖椾含甯備腑鍏虫潙鍖楀ぇ琛?7鍙?,'01062752114','鐜嬫仼鍝?), (2,'娓呭崕澶у','鍖椾含甯傛捣娣€鍖轰腑鍏虫潙澶ц','

嵌入式设备中使用短信服务

全球移动通信系统GSM是我国范围最广.通信能力最强的移动通信服务,其中的短消息功能以其方便.可靠和价廉得到了广泛应用.如果要在嵌入式设备中使用短信功能,要利用GSM模块实现短信的收发. 短信收发原理 短信服务业务SMS(Short Message Service)是GSM系统提供给用户的一种数字业务,它与语音传输及传真一样,同为GSM通讯网络提供的主要电信业务.系统结构图如下: 短消息模块的接入方式支持两种模式:基于AT指令的TEXT模式和基于AT指令的PDU模式.文本模式只支持7-bit编码,

Makefile中的隐式规则

Makefile中的隐式规则 1.隐式规则中的变量 隐式规则中使用的变量分成两种:一种是命令相关的,如"CC":一种是参数相关的,如"CFLAGS". 与命令相关的变量 变量 含义 AR 函数库打开包程序.默认命令是"ar" AS 汇编语言编译程序.默认命令是"as" CC C语言编译程序.默认命令是"cc" CXX C++语言编译程序.默认命令是"g++" CO 从RCS文件中扩展文件