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

如何用PowerShell与正则修改文件名中1080P/720P的大小写?

解决PowerShell批量修改视频文件名中1080P/720P为小写p的问题

正确脚本方案(两种写法)

写法一:正则捕获组+脚本块替换

$validExts = '.mkv', '.mp4', '.mov', '.avi', '.wmv', '.webm', '.avchd', '.flv'
Get-ChildItem -File |
    Where-Object Extension -In $validExts |
    Where-Object Length -Gt 500mb |
    Rename-Item -NewName {
        $_.BaseName -replace '(1080P|720P)', { $_.Groups[1].Value.ToLower() }
    } -WhatIf

写法二:更简洁的正则替换(推荐)

$validExts = '.mkv', '.mp4', '.mov', '.avi', '.wmv', '.webm', '.avchd', '.flv'
Get-ChildItem -File |
    Where-Object Extension -In $validExts |
    Where-Object Length -Gt 500mb |
    Rename-Item -NewName {
        $_.BaseName -replace '(1080|720)P', '$1p'
    } -WhatIf

注意:-WhatIf参数用于预览重命名结果,确认无误后可删除该参数执行实际重命名操作。

原脚本的问题分析

  1. 正则表达式匹配逻辑错误

    • 你使用的^.*(1080P|720P)$会匹配整个文件名,替换时会把原文件名的全部内容替换成捕获到的1080P/720P的小写版本,直接丢失前面的文件名内容;^.*(1080P|720P).*$虽然能匹配包含目标字符串的任意位置,但同样存在替换逻辑错误。
    • 正确的做法是只精准匹配需要修改的1080P或720P片段,保留文件名其他部分。
  2. 替换值写法错误

    • 你尝试的$_.Value.ToLower()中,$_在-NewName的脚本块里代表当前文件对象,而非正则匹配结果,文件对象没有Value属性,导致PowerShell直接将字符串.Value.ToLower()拼接到文件名中,出现诸如ISLAND OF THE DOLLS 2023 ENGLISH 1080P.Value.ToLower()的异常结果。

效果示例

输入文件名:ISLAND OF THE DOLLS 2023 ENGLISH 1080P.mkv
执行脚本后输出:ISLAND OF THE DOLLS 2023 ENGLISH 1080p.mkv

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 18:06:15