V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
realpg
0.01D
V2EX  ›  程序员

windows 资源管理器的"按名称排序"对文件名中字母数字混合的数字的处理是什么时候改成现在这个样子的?

  •  
  •   realpg ·
    PRO
    ·
    realpg · 7 小时 37 分钟前 · 478 次点击

    现在 win11 的行为是: 把文件名中出现的连续数字 作为一个整体数值 按照数值大小比较处理排序

    今天惊奇的发现

    比如一个文件夹中有以下文件名的文件

    A123B56.txt
    A97B00.txt
    

    在按文件名排序(升序或者降序)时 他会把这个主文件名当作四个"排序单位"进行比较

    A 123 B 56
    A 97 B 00
    

    按文件升序排列时

    因为 97<123 第二个文件会排到第一个前面

    历史庞大的数据归档文件夹里为了兼容以前旧的历史数据(完全按位 ascii 比较)设计的文件夹架构 全乱套了

    9 条回复    2025-10-08 23:35:03 +08:00
    Ketteiron
        1
    Ketteiron  
       7 小时 24 分钟前
    这样的处理是标准的自然排序法,是给正常地球人使用的排序方法,印象中 XP 以后都是这样的,更早的 2000 之前是 ASCII 排序法。
    geelaw
        2
    geelaw  
       7 小时 21 分钟前
    自中古以来就是这样排序的,我自己记不得 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

    这样的顺序。
    AV1
        3
    AV1  
       7 小时 4 分钟前
    一个叫字典序,不对字符串里的数字做特殊处理。
    一个叫自然序,会对字符串里的数字单独排序。
    windows 采用自然序的行为,最迟是 win xp 开始采用了。


    @geelaw 刚试了下 win98 、ME 虚拟机,还是字典序,XP 已经是自然序了。
    realpg
        4
    realpg  
    OP
    PRO
       6 小时 58 分钟前
    @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 时代了 而且运行了这么多年 虽然好像从来没启用过这个备份数据用作查找, 但是生成这个目录结构时候应该可以发现排序跟预期不符 也没人提过
    Ketteiron
        5
    Ketteiron  
       6 小时 33 分钟前
    前人可能改 XP 的注册表了
    你现在也可以改组策略回退到 2000 之前
    qianxuu
        6
    qianxuu  
       6 小时 17 分钟前
    还是会有很多软件像 everything 这样排序,所以一般来说会在数字前面补 0 对齐位数
    loli
        7
    loli  
       5 小时 56 分钟前
    有一个专门的 api 是用于干这个的,
    我编写相关软件是必用的,否则顺序和资源管理器中不一致时会非常难受
    https://learn.microsoft.com/zh-cn/windows/win32/api/shlwapi/nf-shlwapi-strcmplogicalw
    上面显示最低支持 XP
    realpg
        8
    realpg  
    OP
    PRO
       5 小时 46 分钟前
    @Ketteiron #5
    破案了 是我的问题

    windows 这个排序是没问题的 应该很久了

    win11 以后才发现是因为 那个比较特殊的文件格式 win11 可以直接预览了 也可以直接简单打开了 所以诞生了用电脑直接查看这个目录的用法 以前不是这么用的

    早期版本是不支持 explorer 预览的, 所以公司的对应部门有个小软件用来实时列表预览 选中 一键发送到目标目录等

    那个预览软件是字典序

    正常恢复目录后 直接把小软件拷到上层目录运行
    geelaw
        9
    geelaw  
       4 小时 0 分钟前
    @realpg #8 能不能预览是有没有安装预览处理程序的问题(当然你用的软件可能只支持 Windows 11 ),预览处理程序是 Windows Vista 引入的。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   699 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 19:35 · PVG 03:35 · LAX 12:35 · JFK 15:35
    ♥ Do have faith in what you're doing.