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

如何用PowerShell移除文件名中的[*]?现有脚本存在匹配遗漏问题

解决PowerShell移除文件名中[*]内容的问题

问题原因

  1. 正则表达式不符合需求:原脚本仅删除了方括号[和],但保留了括号内的内容。如果需要删除的是整个[任意文本]格式的片段(包括括号本身),原正则表达式无法实现。
  2. 通配符解析问题:Rename-Item的-Path参数会将文件名中的方括号当作通配符处理,导致无法正确定位目标文件,最终跳过重命名操作。

修复后的脚本

$rootDirectory = "C:\Path\To\Your\Root\Directory"

Get-ChildItem -Path $rootDirectory -File -Recurse | ForEach-Object {
    # 移除所有[任意内容]格式的片段(含括号)
    $newName = $_.Name -replace '\[[^\]]*\]', ''
    
    # 可选:清理因移除片段产生的多余空格(比如"文件 .txt"变为"文件.txt")
    $newName = $newName -replace '\s+', ' '

    if ($newName -ne $_.Name) {
        $newPath = Join-Path -Path $_.Directory.FullName -ChildPath $newName
        # 使用-LiteralPath避免特殊字符被当作通配符
        Rename-Item -LiteralPath $_.FullName -NewName $newName -Force
        Write-Host "重命名: $($_.FullName) -> $newPath"
    }
}

关键修改说明

  • 正则表达式调整:\[[^\]]*\]精准匹配并删除所有被方括号包裹的内容。其中[^\]]*表示匹配任意非]的字符,确保只删除单个括号对之间的内容,不会跨多个括号匹配。
  • 使用-LiteralPath:强制PowerShell将文件路径当作字面量处理,避免方括号等特殊字符被解析为通配符,确保所有目标文件都能被正确重命名。
  • 可选空格清理:如果移除括号片段后文件名出现多余空格(比如"文档 [备份].pdf"变为"文档 .pdf"),可以通过-replace '\s+', ' '将连续空格替换为单个空格,或者用-replace '\s+', ''直接删除所有空格,根据需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 06:35:34