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

PowerShell技术问询:如何修改正则表达式代码按下划线分割文件名并提取指定信息

解决PowerShell提取下划线分隔文件名信息的问题

我明白你的需求了——要从格式为CodeID_FileName_DateCode.pdf的文件名里提取三个字段,生成自定义对象后导出到CSV。原来的代码里正则表达式和变量赋值部分不对,我帮你调整好了,下面是完整的可运行代码:

样本数据

123456_FileName1_01012021.pdf
123457_FileName2_01012021.pdf
123458_FileName3_01012021.pdf
123459_FileName4_01012021.pdf
123460_FileName5_01012021.pdf

预期结果

提取每个文件名中的:

  • CodeID:文件名开头的数字串(如123456)
  • FileName:中间的自定义名称(如FileName1)
  • DateCode:末尾的日期串(如01012021)
    生成包含这三个属性的自定义对象集合,最终导出到指定CSV文件。

修改后的PowerShell代码

# 定义输出CSV路径和待处理文件路径
$destinationPath = '\path1\test.csv'
$InStuff = @(Get-ChildItem "\path2\" -Name -Recurse)

# 如果目标CSV已存在则删除
if (Test-Path $destinationPath) {
    Remove-Item $destinationPath
}

# 处理文件名并提取信息
$results = switch -Regex ($InStuff) {
    # 正则表达式匹配:开头数字_中间任意非下划线字符_数字.pdf结尾
    '^(\d+)_([^_]+)_(\d+)\.pdf$' {
        [pscustomobject]@{
            CodeID    = $matches[1]  # 第一个捕获组:CodeID
            FileName  = $matches[2]  # 第二个捕获组:FileName
            DateCode  = $matches[3]  # 第三个捕获组:DateCode
        }
    }
}

# 将结果导出到CSV
$results | Export-Csv -Path $destinationPath -NoTypeInformation

关键修改说明

  1. 正则表达式调整:把原来的'[^-]*'改成了'^(\d+)_([^_]+)_(\d+)\.pdf$',这个正则会精准匹配你的文件名格式:
    • ^(\d+):匹配开头的数字串(CodeID)并捕获为第1组
    • _([^_]+)_:匹配中间的非下划线字符(FileName)并捕获为第2组
    • (\d+)\.pdf$:匹配结尾的数字串(DateCode)并捕获为第3组,同时确保文件后缀是.pdf
  2. 变量赋值优化:直接使用正则捕获组$matches[1]/[2]/[3]来获取对应字段,不需要额外的-split操作,更高效准确
  3. 增加导出步骤:原来的代码没写导出CSV的命令,我补上了Export-Csv,加上-NoTypeInformation避免CSV里生成多余的类型信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 06:29:07