---
title: "微软当年其实也想用正斜杠"
description: "追溯 Windows 反斜杠路径分隔符的由来：1983 年 DOS 2.0 本想沿用 Unix 的正斜杠，因 IBM 坚持兼容参数前缀而改用反斜杠，这笔妥协一用就是 40 多年。"
date: 2026-04-23T17:05:00Z
canonical: https://xiaobox.github.io/p/2026-04-24-wei-ruan-dang-nian-qi-shi-ye-xiang-yong-zheng-xie-gang/
author: 小盒子
categories: ["行业与思考"]
source: https://mp.weixin.qq.com/s/HXgssuVg8P80OFbGB-W1Bw
license: CC BY-NC-SA 4.0
license_url: https://creativecommons.org/licenses/by-nc-sa/4.0/
---

# 微软当年其实也想用正斜杠


换过电脑的人应该都注意过一件事。

Mac 上文件路径长这样，`/Users/xxx/Documents`。

Windows 上长这样，`C:\Users\xxx\Documents`。

中间那个分隔符，一个是斜杠，一个是反斜杠。写过跨平台代码的人还知道另一件事，这一个字符的差别，每年要让全世界开发者写无数次 path.join、os.path、pathlib。

40 多年了，没人改过，也没人敢改。

这个反斜杠的身世，跟技术其实没什么关系。它是 1982 到 1983 年 DOS 2.0 开发那 10 个月里，两家公司反复拉锯留下来的一笔兼容性妥协。

---

我做开发这些年，`\` 这东西带来的问题总是遇到，回回都得处理，但一直没深究过，以为是微软的审美，或者故意要跟 Unix 划清界限。最近翻到 1983 年的老资料，发现跟审美没一毛钱关系。

这事要从 Unix 说起。

---

1970 年前后，Ken Thompson 和 Dennis Ritchie 在贝尔实验室定 Unix 的目录分隔符。前身 Multics 没定过这个标准，两个人顺手挑了 `/`。键盘上有、看着利索、没跟别的符号冲突。

这个决定后来写进 Unix，Linux 继承，macOS 继承，Android 继承。今天全世界的操作系统，除了 Windows，路径分隔符全是 `/`。

到这一步历史还没分叉。

---

不过分叉的种子，其实比 Unix 还早几年就埋下了。

1970 年代初，DEC 的 TOPS-10 操作系统是大学和科研院所的主流。TOPS-10 的命令行有个约定，用 `/` 做参数前缀。你敲 `DIR /W`，那个 `/W` 是参数，告诉 DIR 用宽格式显示。作用等同于今天 Unix 的 `-`（`ls -l` 那个短横）。

这个习惯，70 年代一大批在大型机上练手的工程师都熟。他们后来进了各家公司，其中一批进了 IBM。

---

1980 年，Tim Paterson 在西雅图一家小公司写了一个 86-DOS。第二年微软从他手里把这东西买下来，改名 MS-DOS 卖给 IBM，装进 1981 年的 IBM PC。

关键点就在这里。

MS-DOS 1.0 没有子目录，只有扁平文件系统，所有文件都在根目录下。但 DOS 1.0 附带的 `DIR`、`FORMAT`、`COPY` 这些命令，相当一部分是 IBM 工程师写的。这批人从 TOPS-10 时代长大，写程序顺手就用 `/` 做参数前缀。于是 `DIR /W`、`FORMAT /Q`、`COPY /Y`，全是 `/`。

`/` 在 DOS 世界里，先成了参数前缀。

不是路径分隔符，因为根本没有路径这个概念。

---

分水岭在 1983 年。

准确说，是 1982 年到 1983 年 3 月的那 10 个月。DOS 2.0 要大改，从 DOS 1.x 的扁平文件系统加上子目录，再加上硬盘支持。微软这头是 Paul Allen 带着 Mark Zbikowski、Aaron Reynolds 一共 6 个人在做。IBM 那头是 Boca Raton 的 PC 部门，两边隔着整个北美大陆反复对接。

既然要子目录，就要一个路径分隔符。微软的工程师想法很自然，既然子目录是学 Unix 的，分隔符就跟 Unix 一样用 `/` 呗。图省事。

IBM 那边不同意。

IBM 的理由讲得也清楚。`/` 在 DOS 1.x 里已经是参数前缀，几十万套已经卖出去的 IBM PC、所有第三方开发者写的 DOS 程序，全都在这么用。真要把 `/` 改成路径分隔符，兼容性会是个灾难，所有现有的程序都得重写。

IBM 是大客户。微软不敢得罪。

工程团队重新看了看键盘，要找一个没被占用、键盘上本就有、最好不用 Shift 键也能敲的字符。

筛到最后，只剩下 `\`。

就这么定了。

---

从那天起，Windows 用 `\`，Unix 用 `/`，一用就是 42 年。

中间微软也不是没想过统一。Windows NT 起（1993 年），Win32 API 其实早就兼容 `/`，你在程序里写 `C:/Users` 大多数时候都能跑。但 cmd.exe 没改，PowerShell 没改，文件资源管理器显示的路径也没改。

为什么不改？

因为这一套生态里，几十万个老程序、几百万个批处理脚本、无数个注册表项、企业内网跑了 30 年的老 SDK，全都在用 `\`。动这个字符，几亿用户和几百万开发者都要跟着适配。微软每次想统一，先算一笔账。账算不过来，作罢。

---

所以今天你按下键盘上那个反斜杠键的时候，按下的不是一个字符。

是 1983 年 DOS 2.0 开发尾声，微软 6 个人和 IBM 来回拉锯之后留下的一笔兼容承诺。

那笔承诺当时只是个权宜，现在变成了遗产。Windows 开发者每次写 `\\` 转义，跨平台工程师每次写 path.join，CI 工程师每次调脚本，都在还当年留下的债。

一个字符的差别，分开了两个世界。分开它们的不是技术，是一次大客户的强势，加上一代开发者的惰性。

代码每天在变，兼容性却像是凝固的历史。AI 也改变不了。

Mac 上那个 `/`，是 1970 年 Thompson 顺手挑的。

Windows 上这个 `\`，是 1983 年 IBM 留给微软的。

一个是选择，一个是欠的债。

这笔债，还没还完。

---
