驱动之家 昨天
Windows文件命名六大禁忌 原因要追到1981年的DOS 1.0:40多年没动
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_keji1.html

 

快科技 10 月 20 日消息,在 Windows 上用户可以给文件起甚至 200 个字符的命名,塞满空格和 emoji 都没问题,但有几个特殊的名字,系统却会直接拒绝。

即便是在最新的 Windows 11 26H2 上,用户仍无法将文件或文件夹命名为 CON、PRN、AUX、NUL、COM1-COM9、LPT1-LPT9,会直接提示指定的设备名无效。

原因在于这些是保留设备名,每个对应一个设备:CON 是控制台(键盘和屏幕),PRN 是打印机,AUX 是辅助设备,NUL 是空设备(吞掉一切输出),COM1 至 COM9 是串口,LPT1 至 LPT9 是并口。

微软文件命名文档也告诉开发者不要使用这些保留名作为文件名,这一规则也适用于文件夹,因为 Windows 把文件夹当作特殊类型的文件。加扩展名也没用,像 NUL.txt 和 NUL.tar.gz 都等同于 NUL。

根据微软资深工程师 Raymond Chen 在 2003 年博客中解释,这条规则要追溯到 1981 年的 DOS 1.0,DOS 1.0 不支持子目录、小写字母和超过 8.3 的文件名。

但根源并不在 DOS 本身,而是 DOS 想兼容的 CP/M,CP/M 里设备名会带冒号,比如 CON:,一看就知道是设备不是文件,MS-DOS 为了兼容 CP/M,把冒号变成了可选。

DOS 1.0 时代只有一个目录,这些名字没有歧义,汇编器问输出存哪,输入 PRN 就是打印,输入 NUL 就是丢弃,输入 CON 就是显示在屏幕上。

1983 年 DOS 2.0 引入文件夹后问题来了,如果保留名只在根目录生效,切到子文件夹运行汇编器时输入 NUL 就不管用了。

微软的解决办法是让这些名字在每个文件夹里都生效,这就是如今文件夹里不能有这些命名的原因。

之所以 40 多年没清理,Chen 的回答很简单:" 大家还在依赖它们。",比如批处理用>NUL 隐藏输出,脚本用 if exist directorynamenul 检查文件夹是否存在,老教程教人用 copy CON 创建文件。一旦规则被删,每个重定向到 NUL 的脚本都会开始往磁盘写真实文件,后果不堪设想。

智客推

智客推

ZAKER 智客推 GEO | AI 时代的品牌认知解决方案

一起剪

一起剪

ZAKER旗下免费视频剪辑工具

相关标签

dos windows 微软 打印机 ms-dos
相关文章
评论
没有更多评论了
取消

登录后才可以发布评论哦

打开小程序可以发布评论哦

12 我来说两句…
打开 ZAKER 参与讨论