为什么文件路径 Program Files 可以写成 Progra~1

简介: 为什么文件路径 Program Files 可以写成 Progra~1

有很多同学可能不理解为什么文件路径 Program Files可以写成 Progra~1,那这里首先要了解一下文件名规范:



8.3格式


8.3格式通常指较旧的Windows操作系统或DOS的文件命名格式。


“8”是指文件名或目录名的主体部分小于等于8个字节;


“3”是指文件名的扩展名部分小于等于3个字节;


8.3文件名的有效字符不包括空格等特殊字符;


若不符合以上限制则会以"~“作延长名称如"Program Files"会变成"Progra~1”

若同一文件夹有相似的名称,末端的数值则会自动递增


8.3短文件名格式规范是DOS+FAT12/FAT16时代遗留下的老规矩,自从Windows95开始(其实据说从Windows for Groups 3.11开始),Windows就已经能支持长文件名,但是为了向前兼容,特别是文件系统兼容性,FAT文件系统均强制执行“为长文件名提供8.3兼容格式的短文件名”的特性。


因此你会看到,在FAT16/32文件系统上:


目录"program files"同时还拥有一个8.3规范的"PROGRA~1"短名称;


而文件"元素周期表.exe"也同时拥有一个"元素周~1.exe"的短名称。这有一点像类UNIX系统下的hardlink,一个对象拥有两个引用方式。



如:

vbs中 同一语句使用长名如下:
WshShell.Run """D:\Program Files\Notepad++\notepad++.exe """&name,1, false
使用8.3命名规则如下:
WshShell.Run "D:\Progra~1\Notepad++\notepad++.exe """&name,1, false

c:\progra~1 这种目录是在纯DOS下看到的,纯DOS使用8.3文件格式。



8.3格式文件命名规范


8.3格式介绍:文件名规范:8.3格式

文件夹(sub-directry)名称,以前是不允许带空白的,后来允许带空白,但由于有了空白,许多命令出现二义性,于是采用双引号括起来的办法。


例如:

   以前想要访问:Documents and Settings,用 cd Documents and Settings 是行不通的,得采用双引号的方式:


   cd " Documents and Settings "

但用到set PATH时很麻烦,名字太长,双引号时常括错。于是采用8个字符缩写,即:写前六个有效字母(不计空格字符),另加波浪号和1,重名的就 ~ 2、~3,如此组成8位数。后来,这种方法成了规定。例如:


PROGRA~1    # 表示 Program Files
PROGRA~2    # 表示 Program Files (x86)
DOCUME~1    # 表示 "Documents and Settings"
LOCALS~1    # 表示 "Local Settings"
C:\progra~1    # 表示 "C:\program files"



注意略去空白,用了第二个词的字母,凑成六个,再加波浪号和1。


所以窗口下的 C:\program files 文件夹进入纯DOS看到的是 C:\progra~1,这个被延续到WINDOWS中,也是因为地址太长才写成这样的。因为只能输入255个字符所以才写成这样。

% 这种有百分号的是电脑的相对地址写法。原来也是在DOS中使用的,现在在WINDOWS中一般没有任何使用的必要,只有在书中才使用,一般只是表示系统文件夹的。


%号表明环境变量要寻找的地址。


progra~1是program files 的可选文件名,那么我如何来知道别的文件名的这种表示呢?

在dos年代,文件只是8个字符的长度,但是到了Windows的年代,为了和dos的兼容行,在超过了8个字符的文件名就只取前面的6个在最后两位加~1.

所以 document and settings 就变成 docume~1了!!


具体详见:

Window高级编程指南的第14章




相关文章
|
人工智能 机器人 数据安全/隐私保护
【必看!】阿里云推出QWen-7B和QWen-7b-Chat,开放免费商用!
阿里云最近发布了两款大型开源模型QWen-7B和QWen-7b-Chat,这两款模型的参数规模达到了70亿,用户可以在Hugging Face和ModelScope上免费使用。尽管大型模型的热度近期有所下降,但阿里云选择开源模型来赢得用户的支持,并保持自身在竞争中的优势。这一举措也引起了人们的关注,因为不开源可能会导致信息泄露的风险。通过开源模型,阿里云既能满足用户需求,又能保持技术竞争力。
1527 0
 【必看!】阿里云推出QWen-7B和QWen-7b-Chat,开放免费商用!
|
JavaScript 前端开发 Java
基于springboot的留守儿童爱心网站
这是一个基于SpringBoot的留守儿童爱心网站,包含管理员和用户两种角色。管理员负责用户、新闻、志愿活动、捐赠等管理;用户可进行登录注册、爱心捐赠及活动报名。项目采用SpringBoot与Mybatis作为后端框架,前端则使用HTML和VUE。适用于JDK1.8、IDEA/Eclipse、MySQL5.7/8.x,无需特定Tomcat或Maven版本,支持Windows系统。
246 13
基于springboot的留守儿童爱心网站
|
存储 编译器 程序员
QT源码学习 | 编译器知识点
本文是关于QT源码学习中编译器知识点的总结,包括`__declspec`、`Q_FUNC_INFO`、`__assume`、`__attribute__`、`__ASSEMBLER__`、`QT_SUPPORTS`和`QT_WARNING_DISABLE_MSVC`等宏定义的使用和作用,以及相关参考链接。
365 0
QT源码学习 | 编译器知识点
|
Oracle Java 关系型数据库
oracle实现主键自增长及自动生成策略
oracle实现主键自增长及自动生成策略
604 0
|
分布式计算 资源调度 Java
Scala+Spark+Hadoop+IDEA实现WordCount单词计数,上传并执行任务(简单实例-下)
Scala+Spark+Hadoop+IDEA实现WordCount单词计数,上传并执行任务(简单实例-下)
188 0
|
监控 Dubbo Java
超详细的Sentinel入门
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
超详细的Sentinel入门
|
Java Nacos 网络架构
SpringCloud Gateway的使用 + Nacos动态路由
SpringCloud Gateway的使用 + Nacos动态路由
成功解决urllib.error.URLError: <urlopen error [Errno 11001] getaddrinfo failed>
成功解决urllib.error.URLError: <urlopen error [Errno 11001] getaddrinfo failed>