---
title: "为什么全世界的 Windows 电脑，都建不出一个叫 con 的文件夹"
description: "你可以现在就在手边的 Windows 电脑上做一个实验。 不管是最新的 Windows 11，还是二十年前的 Windows XP。 在桌面上点右键，新建一个文件夹。 把名字改成 con，按回车。"
date: 2026-08-28T04:00:00Z
canonical: https://xiaobox.github.io/p/2026-08-28-wei-shen-me-quan-shi-jie-de-windows-dian-nao-dou-jian-bu-chu/
author: 小盒子
categories: ["系统底层"]
tags: ["架构"]
license: CC BY-NC-SA 4.0
license_url: https://creativecommons.org/licenses/by-nc-sa/4.0/
---

# 为什么全世界的 Windows 电脑，都建不出一个叫 con 的文件夹


你可以现在就在手边的 Windows 电脑上做一个实验。

不管是最新的 Windows 11，还是二十年前的 Windows XP。

在桌面上点右键，新建一个文件夹。

把名字改成 `con`，按回车。

![](https://xiaobox-public-images.oss-cn-beijing.aliyuncs.com/images/windows-con-folder-error-demo.png)

系统会立刻弹出一个毫无由头的错误提示，说「指定的设备名无效」，然后强行把名字退回「新建文件夹」。

你不信邪，换成大写的 `CON`，不行。

加个后缀叫 `con.txt`、`con.png`，还是不行。

甚至在命令提示符里敲 `mkdir con`，它依然冷冷地回你一句系统找不到指定文件。

不仅是 `con`。如果你去试 `prn`、`aux`、`nul`，或者 `com1`、`lpt1`，会发现它们全都被系统拉进了黑名单。

刚学电脑那会儿，很多人以为这是微软留的什么秘密后门，或者某个高深莫测的内核安全机制。

甚至早年贴吧里还流传过一个谣言，说比尔·盖茨小时候外号叫 con，他觉得被羞辱了，所以不准 Windows 出现这个词。

其实全想多了。

这扇被焊死了五十年的大门背后，压根没有什么安全哲学，也没有什么首富恩怨。

它纯粹是 1974 年一个为了省事的偷懒设计，被微软一路当成祖传包袱，供奉到了今天。

事情得从五十二年前讲起。

1974 年，计算机先驱加里·基尔代尔写出了微机历史上第一个真正意义上的操作系统，CP/M。

当时的电脑长得像个大铁箱子，没有图形界面，没有鼠标，甚至连硬盘都没有。

程序员想写程序，得靠键盘输入代码，想看输出，就得连一台嗡嗡作响的物理针式打印机。

加里·基尔代尔想了一个很讨巧的办法，他把所有连接到电脑上的硬件，全都虚拟成了一个个名字。

键盘和屏幕合起来叫控制台，缩写成 `CON`，也就是 Console。

物理打印机叫 `PRN`，也就是 Printer。

串口通信叫 `AUX`，也就是 Auxiliary。

黑洞丢弃设备叫 `NUL`，也就是 Null。

这么做有什么好处呢。

当时的操作极其朴素，程序员如果想把一段话打印出来，不需要专门写一套复杂的打印驱动程序。

他只需要在命令行里敲一句 `copy memo.txt prn`。

系统看到目标是 `PRN`，就会自动把这篇文本的所有字节，原封不动地推给针式打印机。

如果你想新建一个文本文件，敲一句 `copy con test.txt`，接着你在键盘上敲的每一个字，就会被实时抓取并存进文件里。

在那个连文件系统都处于石器时代的年代，这套设计确实很聪明。

但问题在于，当时的 CP/M 是一维平面的，整个软盘里只有一层文件，压根就没有「文件夹」或者「子目录」的概念。

加里·基尔代尔在底层写判断逻辑的时候，压根不需要考虑路径。只要输入的字符串匹配到 `CON` 或 `PRN`，系统直接就把它当成物理硬件给拦截了。

转折点发生在 1981 年。

微软接了 IBM 的大单，要给 IBM PC 配一套操作系统。

比尔·盖茨和蒂姆·帕特森在赶工 MS-DOS 1.0 的时候，基本全盘继承了 CP/M 的这套 API 和设备命名习惯。

到了 1983 年，微软发布 MS-DOS 2.0。

这时候计算机终于有了子目录，也就是我们今天熟悉的层级文件夹 `C:\work\project\`。

微软的工程师在重写文件系统解析器时，面临了一个选择。

这些从 1974 年继承过来的古老设备名，到底该怎么处理。

按理说，最严谨的做法是做作用域隔离，只有在根目录下或者特定的硬件命名空间里，`CON` 和 `PRN` 才代表硬件，在普通的子文件夹里，用户爱叫什么就叫什么。

但当年的工程师赶着交付，做了一个极其省事的决定。

他们在文件系统解析的最顶层，直接写死了一段硬编码规则，无论用户在哪个盘符、哪一层子目录下输入路径，只要文件名剥掉后缀后等于 `CON`、`PRN`、`AUX` 或 `NUL`，系统就无条件把它劫持为硬件设备。

也就是说，在系统眼里，`C:\games\con.txt` 根本不是一个文本文件，而是你面前的键盘和屏幕。

这一行五分钟写出来的偷懒逻辑，给后来的 Windows 埋下了一个长达半个世纪的超级大坑。

时间来到 1993 年，微软开始做划时代的 Windows NT。

这套系统拥有全新的 32 位架构，彻底抛弃了古老的 DOS 内核。

按理说，这是把这个历史烂摊子打扫干净的最佳时机。

但微软著名的内核架构师 Raymond Chen 后来在技术博客里透露，他们当时根本不敢删。

因为在九十年代，全世界的大银行、工厂、航空公司和政府机构里，跑着海量用 C 语言或者 Basic 写的古董商业软件。

很多老银行系统的打印模块，代码里依然写着向 `C:\TEMP\PRN` 输出发票。

如果 Windows NT 允许用户在目录下新建一个叫 `prn` 的正常文件夹，这些价值几十亿美元的商业软件一旦运行，原本该送到物理打印机的账单数据，就会被悄悄写进这个文件夹里，打印机当场哑火。

为了让全世界的老企业能毫无痛感地升级系统，微软只能选择继续妥协。

他们在全新的 NT 内核文件子系统里，继续把这几个七十年代的设备名原封不动地保护了起来。

这一保护，就保到了 Windows 11。

今天你用着几十个核心的 64 位处理器，挂着几十 TB 的固态硬盘，点右键依然建不出一个叫 `con` 的文件夹。

不是现代技术解决不了一个三个字母的名字。

而是半个世纪前，有人在一台只有几十 KB 内存的电脑上随手写下的一行代码，借着兼容性的名义，跨越了五十年光阴，依然在管着今天几十亿台现代电脑。

很多时候我们在电脑里遇到的那些莫名其妙的规矩，别急着脑补有多深刻的大道理。

往回扒几十年，往往只是当年某位祖师爷为了赶在下班前交差，随手打的一个补丁而已。

