You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中循环前正确排序带数字前缀的Windows更新MSU文件

如何按数字前缀正确排序Windows更新MSU文件?

你遇到的问题是典型的字符串字典序排序 vs 数值排序的差异——默认的Sort-Object Name是按字符串逐个字符比较的,所以"10"会排在"2"前面(因为第一个字符'1'的ASCII码比'2'小)。要实现按文件名开头的数字顺序排序,我们需要把前缀的数字提取出来并转换成整数,再基于这个数值排序。

这里有两种简单的解决方案:

方案1:通过分割文件名提取数字

利用文件名的#_FILENAME格式,直接分割下划线获取前缀数字,转成整数后排序:

Get-ChildItem -Path "PATH HERE" -Recurse | 
  Where-Object {$_.Name -like "*msu*"} | 
  Sort-Object -Property @{Expression={[int]($_.Name.Split('_')[0])}} | 
  ForEach-Object{ Write-Host $_.Name }

方案2:用正则表达式提取数字(更健壮)

如果担心文件名格式有微小变化(比如分隔符不是下划线),可以用正则匹配开头的数字部分:

Get-ChildItem -Path "PATH HERE" -Recurse | 
  Where-Object {$_.Name -like "*msu*"} | 
  Sort-Object -Property @{Expression={[int]($_.Name -replace '^(\d+)_.*','$1')}} | 
  ForEach-Object{ Write-Host $_.Name }

原理说明

两种方案的核心都是:

  1. 从文件名中提取开头的数字字符串
  2. 把字符串转换成[int]整数类型
  3. 让Sort-Object基于整数数值排序,这样就能得到1、2、3...10、11的自然顺序了

测试一下,你就能看到文件会按1到31的正确顺序输出啦。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 20:37:38