现在 win11 的行为是: 把文件名中出现的连续数字 作为一个整体数值 按照数值大小比较处理排序
今天惊奇的发现
比如一个文件夹中有以下文件名的文件
A123B56.txt A97B00.txt
在按文件名排序(升序或者降序)时 他会把这个主文件名当作四个"排序单位"进行比较
A 123 B 56 A 97 B 00
按文件升序排列时
因为 97<123 第二个文件会排到第一个前面
历史庞大的数据归档文件夹里为了兼容以前旧的历史数据(完全按位 ascii 比较)设计的文件夹架构 全乱套了
![]() | 1 Ketteiron 21 小时 55 分钟前 这样的处理是标准的自然排序法,是给正常地球人使用的排序方法,印象中 XP 以后都是这样的,更早的 2000 之前是 ASCII 排序法。 |
![]() | 2 geelaw 21 小时 53 分钟前 自中古以来就是这样排序的,我自己记不得 Windows 98 的行为了,但根据 https://devblogs.microsoft.com/oldnewthing/20080804-00/?p=21383 的链接可以知道 2006 年的 Windows 已经对数字有特殊处理了,也就是至少 Windows XP 开始就是这样了。 根据 CompareString 的文档,至少从 Windows 95, Windows NT 3.1 开始就已经有不区分平假名和片假名的选项了,而且简体中文和繁体中文的规则也很不同(只有繁体中文会用笔画数)。总之,简单的答案是:Explorer 的 UI 排序是非常复杂的字符串比较。 用 ASCII 排序应该已经很久没有在 Windows 下 work 过了,普通用户并不期待 A-0.txt Z-1.txt a-2.txt 这样的顺序。 |
![]() | 3 AV1 21 小时 35 分钟前 一个叫字典序,不对字符串里的数字做特殊处理。 一个叫自然序,会对字符串里的数字单独排序。 windows 采用自然序的行为,最迟是 win xp 开始采用了。 @geelaw 刚试了下 win98 、ME 虚拟机,还是字典序,XP 已经是自然序了。 |
![]() | 4 realpg OP PRO @Ketteiron #1 @geelaw #2 @AV1 #3 回头我找找做个测试 说实话我从来没关注过这玩意 这边是有一份 windows 的按目录备份的海量数据备份文件, 这是一个排序第五的备份方式了, 很靠后的, 平时根本用不到, 因为涉及超级重要的数据所以独立备份方式很多, 做了加密后文件用六种方式备份到了超过 30 个地方 里面的目录层级结构就是按照 ascii 比较的方式设计的目录名 然后现在拷回到 windows 11 下 目录排序全乱(近百万小文件按目录组织) 因为这个备份规则也不是我们这一代人定的, 前人的规范文本上说的就是因为目录排序原因要求这么命名方便排序 直接进目录查找 我简单举例吧 做一点脱敏 找类似方便理解的内容替换 规范要求的目录命名大致是这样的 [发票-2010OLDER] ...... [发票-2021_1] [发票-2021_2] [发票-2021_3] [发票-2021_4] ...... [发票-20241202] [发票-20241203] [发票-20241204] [发票-20241205] [发票-20241206_01] [发票-20241206_02] [发票-20241206_03] [发票-20241209~20241227] [发票-20241230_01] [发票-20241230_02] [发票-20241230_03] [发票-20241230_04] [发票-20241230_05] [发票-20241231_01] [发票-20241231_02] [发票-20241231_03] [发票-20241231_04] [发票-20241231_05] [发票-20241231_06] [发票-202501] [发票-202502] [发票-202503_1] [发票-202503_2] [发票-202503_3] [发票-202503_4] [发票-202503_5] 我不认为前人定这个标准 当时的 windows 排序会乱 当然我也没能力找到前人 这就很奇妙的冲突 让我认为是最近 windows 才改成这样 因为设计这个标准的年份应该是 XP 时代了 而且运行了这么多年 虽然好像从来没启用过这个备份数据用作查找, 但是生成这个目录结构时候应该可以发现排序跟预期不符 也没人提过 |
![]() | 5 Ketteiron 21 小时 5 分钟前 |
![]() | 6 qianxuu 20 小时 48 分钟前 |
7 loli 20 小时 28 分钟前 有一个专门的 api 是用于干这个的, 我编写相关软件是必用的,否则顺序和资源管理器中不一致时会非常难受 https://learn.microsoft.com/zh-cn/windows/win32/api/shlwapi/nf-shlwapi-strcmplogicalw 上面显示最低支持 XP |
![]() | 8 realpg OP PRO @Ketteiron #5 破案了 是我的问题 windows 这个排序是没问题的 应该很久了 win11 以后才发现是因为 那个比较特殊的文件格式 win11 可以直接预览了 也可以直接简单打开了 所以诞生了用电脑直接查看这个目录的用法 以前不是这么用的 早期版本是不支持 explorer 预览的, 所以公司的对应部门有个小软件用来实时列表预览 选中 一键发送到目标目录等 那个预览软件是字典序 正常恢复目录后 直接把小软件拷到上层目录运行 |
![]() | 9 geelaw 18 小时 32 分钟前 @realpg #8 能不能预览是有没有安装预览处理程序的问题(当然你用的软件可能只支持 Windows 11 ),预览处理程序是 Windows Vista 引入的。 |
![]() | 10 realpg OP PRO @geelaw #9 当然我说的能预览指的是 windows 系统自带的程序就处理这个预览了 我并不是专业人员, 没这个软件 这是一种比较特殊的专业图像格式 win11 的系统的自带图片查看就能预览了 很神奇 大概是专利可能过期了 |
![]() | 11 opengps 9 小时 17 分钟前 学过程序开发都知道,名称是字符串,所以这么排序没啥毛病。如果硬是觉得别扭,那得回顾下数字补全前缀 0 。但程序不是自己写的,又没法这么操作 |
![]() | 12 luzemin 9 小时 5 分钟前 巧了,那天刚在 hn 上看到:When I say “alphabetical order”, I mean “alphabetical order” https://sebastiano.tronto.net/blog/2025-09-28-alphabetic-order/ 我还专门试了下 Windows 的排序,explorer 中是自然排序,Powershell ls 命令是字典排序 |
13 liuidetmks 9 小时 3 分钟前 最开始时候就应该考虑对齐问题, 缺少直觉 |
![]() | 14 Ketteiron 7 小时 22 分钟前 @luzemin #12 可以让 ps 的排序与 explorer 一致 https://github.com/LarrysGIT/Powershell-Natural-sort/blob/master/NaturalSort.ps1 这样强迫症就没必要补 0 对齐了 |