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

如何使用正则表达式批量去除文件名中的随机后缀?

无需提前过滤的文件名批量去随机后缀方案

你的需求是去除这类文件名末尾的随机字符后缀:

Belinda Carlisle - Mad About You-Xmdtjwmr9zq.mp4
Air Supply - All Out of Love-Jwdzeumnrmi.mp4
Blue Savannah Song - Erasure-Wxoutwk8jv8.mp4
Breathe - How Can I Fall (1988)-Pwz4erdjzra.mp4

现有代码需要先过滤再重命名,这里提供两种无需提前过滤的方法,避免干净文件名出现双重扩展名问题:

方法一:判断后再执行重命名

通过对比原文件名和替换后的文件名,只修改确实需要调整的文件:

Get-ChildItem $targetpath -File | ForEach-Object {
    # 提取不带扩展名的部分,替换末尾的随机后缀,再拼接扩展名
    $newBaseName = $_.BaseName -replace "-[a-z\d]+$", ""
    $newName = $newBaseName + $_.Extension
    # 只有新名字和原名字不同时才重命名
    if ($newName -ne $_.Name) {
        Rename-Item -Path $_.FullName -NewName $newName
    }
}

方法二:用正则分组实现条件替换

利用正则的分组匹配,只有命中规则的文件名才会被修改,未命中的保持原名称:

Get-ChildItem $targetpath -File | Rename-Item -NewName {
    # 正则匹配:分组1是随机后缀前的内容,分组2是扩展名;未匹配则返回原文件名
    $_.Name -replace "^(.*)-[a-z\d]+(\.[^.]+)$", '$1$2'
} -WhatIf

注:-WhatIf参数用于预览重命名效果,确认无误后可以删除该参数执行实际修改。

这两种方法都不需要提前过滤文件,干净的文件名会因为替换后和原名称一致,不会被执行重命名操作,自然也不会出现双重扩展名的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:02:25