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

使用PowerShell批量重命名过长文件名:保留特定后缀与扩展名

批量缩短Windows长文件名(保留[General_xxx]标识与扩展名)

问题说明

我有近8000个文件名/路径长度超出Windows限制的文件,需要保留文件夹结构,因此必须缩短文件名。文件名示例:

File description that is waaay too long for Windows ABCD [General_123].doc
File description that is waaay too long for Windows AB123 [General_456].docx
Spreadsheet for Year 2023 with a too long name [General_159].xls

所有文件名均以[General_xxx]结尾,但该标识的起始位置不固定。我的需求是删除文件名末尾约20个字符,同时保留[General_xxx]和文件扩展名。自己写的脚本无法实现这个逻辑:

Get-ChildItem | rename-item -newname { $_.name.substring(0,$_.name.length-20) + $_.Extension }

修正后的脚本

核心是先定位[General_xxx]的位置,只缩短该标识之前的内容,再拼接保留的部分和扩展名:

Get-ChildItem -File | Rename-Item -NewName {
    $baseName = $_.BaseName
    $extension = $_.Extension

    # 匹配结尾的[General_xxx](xxx为数字)
    $generalMatch = [regex]::Match($baseName, '\[General_\d+\]$')
    if ($generalMatch.Success) {
        $generalPart = $generalMatch.Value
        # 提取[General_xxx]之前的文本并去除末尾空格
        $prefix = $baseName.Substring(0, $generalMatch.Index).Trim()

        # 缩短前缀:减去20个字符,最短保留1个字符避免空文件名
        $shortenedPrefix = if ($prefix.Length -le 20) {
            $prefix.Substring(0, 1)
        } else {
            $prefix.Substring(0, $prefix.Length - 20)
        }

        # 拼接新文件名
        "$shortenedPrefix $generalPart$extension"
    } else {
        # 未匹配到标识时保留原文件名,可按需修改
        $_.Name
    }
} -WhatIf

关键说明

  • -File参数确保只处理文件,不涉及文件夹
  • 正则表达式\[General_\d+\]$精准匹配结尾的[General_xxx]部分
  • 仅缩短[General_xxx]之前的前缀内容,保证标识和扩展名完整保留
  • -WhatIf用于预览重命名结果,确认无误后删除该参数执行实际操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 07:39:50