为什么文件路径 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章




相关文章
|
6天前
|
编译器 API C语言
C/C++ 获取文件名的方法:分享一些实用的获取文件名的方法和技巧(__FILE__,__builtin_FILE(),__BASE_FILE__等)
C/C++ 获取文件名的方法:分享一些实用的获取文件名的方法和技巧(__FILE__,__builtin_FILE(),__BASE_FILE__等)
91 0
|
编解码 C++ Python
成功解决LINK : fatal error LNK1181: 无法打开输入文件“avdevice.lib” error: command 'D:\\Program Files (x86)\\Micr
成功解决LINK : fatal error LNK1181: 无法打开输入文件“avdevice.lib” error: command 'D:\\Program Files (x86)\\Micr
成功解决LINK : fatal error LNK1181: 无法打开输入文件“avdevice.lib” error: command 'D:\\Program Files (x86)\\Micr
javaioIOException - Cannot run program javac error 2 No such file or direct
javaioIOException - Cannot run program javac error 2 No such file or direct
javaioIOException - Cannot run program javac error 2 No such file or direct
|
Linux C语言 C++
VS编译出错:fatal error C1083: 无法打开包括文件:“stdbool.h”: No such file or directory
VS编译出错:fatal error C1083: 无法打开包括文件:“stdbool.h”: No such file or directory
538 0
Cannot open include file: 'unistd.h': No such file or directory的解决办法
Cannot open include file: 'unistd.h': No such file or directory的解决办法
283 0
Shell函数、系统函数、basename [string / pathname] [suffix] 可以理解为取路径里的文件名称 、dirname 文件绝对路径、自定义函数
Shell函数、系统函数、basename [string / pathname] [suffix] 可以理解为取路径里的文件名称 、dirname 文件绝对路径、自定义函数
Shell函数、系统函数、basename [string / pathname] [suffix] 可以理解为取路径里的文件名称 、dirname 文件绝对路径、自定义函数
|
C++ Windows
【错误记录】Windows 控制台程序编译报错 ( fatal error C1083: 无法打开包括文件: “afxwin.h”: No such file or directory )
【错误记录】Windows 控制台程序编译报错 ( fatal error C1083: 无法打开包括文件: “afxwin.h”: No such file or directory )
1118 0
【错误记录】Windows 控制台程序编译报错 ( fatal error C1083: 无法打开包括文件: “afxwin.h”: No such file or directory )
|
Python
Python 相对路径问题:“No such file or directory“
Python 相对路径问题:“No such file or directory“
354 0
在program A里访问program B local class的两种方式
在program A里访问program B local class的两种方式
105 0
在program A里访问program B local class的两种方式