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

如何通过PowerShell将文本中的范围标识填充为完整序列?

PowerShell 展开范围型文本(如C1-C5转为C1,C2,C3,C4,C5)

需求:把文本中的范围格式(如C1-C5,C10-C12)展开为逐个枚举的项,最终输出C1,C2,C3,C4,C5,C10,C11,C12。
目前已尝试将文本中的-替换为..,但不知道如何利用..填充中间数值。

不用先替换-为..,直接针对每个范围项提取前缀和数字区间,利用PowerShell的范围运算符生成完整序列即可,具体实现如下:

  • 读取目标文本文件的完整内容
  • 按逗号分割成独立的范围项
  • 对每个范围项,用正则匹配提取前缀(如C)、起始数字、结束数字
  • 用..生成连续数字范围,逐个拼接前缀得到完整项
  • 将所有展开后的项用逗号连接,写回文件

完整代码示例

# 读取文件内容(-Raw确保一次性读取全部内容)
$content = Get-Content -Path C:\Users\person\Desktop\test\test.txt -Raw

# 处理每个范围项,展开成单个条目
$expandedItems = $content -split ',' | ForEach-Object {
    # 正则匹配前缀、起始数、结束数,兼容前缀相同的范围格式
    if ($_ -match '^([A-Za-z]+)(\d+)-\1?(\d+)$') {
        $prefix = $matches[1]
        $startNum = [int]$matches[2]
        $endNum = [int]$matches[3]
        # 生成数字范围并拼接前缀
        ($startNum..$endNum) | ForEach-Object { "$prefix$_" }
    } else {
        # 非范围格式的内容直接保留
        $_
    }
}

# 将展开后的结果用逗号连接,写入原文件
$expandedItems -join ',' | Set-Content -Path C:\Users\person\Desktop\test\test.txt

# 查看处理后的结果
Get-Content -Path C:\Users\person\Desktop\test\test.txt

代码说明

  • -Raw参数:避免把文件内容拆分成多行数组,保证按完整字符串处理
  • 正则表达式^([A-Za-z]+)(\d+)-\1?(\d+)$:专门匹配前缀相同的范围(如C1-C5),\1确保前后前缀一致
  • $startNum..$endNum:PowerShell的范围运算符,直接生成连续数字序列
  • 兼容非范围项:如果文本里有单独的C13这类条目,会直接保留不处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:50:27