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

如何按文件名末尾第三个分隔符重命名文件?PowerShell实现求助

PowerShell 按分割符截取文件名并重命名

需求说明

需要将类似 a_b_c_d_e_f.txt 的文件名重命名为 a_b_c.txt,即保留文件名基名中前3个下划线分隔的部分,再拼接原扩展名。

现有代码的局限性

你当前的代码通过固定截取字符长度实现重命名:

Get-ChildItem 'C:\Users\xxx\Projects\testfiles' -filter *.txt |
  Rename-Item -NewName {$_.name.substring(0,$_.BaseName.length-9) + $_.Extension}

这种方式仅适用于要删除的字符长度固定的场景,一旦文件名结构变化(比如下划线分隔的部分数量改变)就会出错,灵活性很差。

实现思路与代码

更可靠的方式是按下划线分割文件名基名,提取指定部分后重新拼接,具体实现如下:

基础实现(直接保留前3个部分)

Get-ChildItem 'C:\Users\xxx\Projects\testfiles' -Filter *.txt |
  Rename-Item -NewName { ($_.BaseName -split '_')[0..2] -join '_' + $_.Extension } -WhatIf
  • 代码解释:
    1. $_.BaseName -split '_':将文件名基名(不含扩展名)按下划线拆分为字符串数组,比如 a_b_c_d_e_f 会拆成 @('a','b','c','d','e','f')
    2. [0..2]:提取数组中前3个元素(索引从0开始)
    3. -join '_':把提取的元素用下划线重新拼接成新的基名
    4. + $_.Extension:拼接原文件扩展名
    5. -WhatIf:添加该参数可预览重命名效果,确认无误后再删除该参数执行实际重命名

健壮性优化(处理下划线不足3个的情况)

如果存在文件名基名下划线数量少于3个的情况,可以添加判断逻辑避免错误:

Get-ChildItem 'C:\Users\xxx\Projects\testfiles' -Filter *.txt |
  Rename-Item -NewName { 
    $parts = $_.BaseName -split '_'
    # 若分割后的部分数≤3,保持原文件名;否则保留前3个部分
    if ($parts.Count -le 3) { $_.Name }
    else { ($parts[0..2] -join '_') + $_.Extension }
  } -WhatIf

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:07:38