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

PowerShell脚本需求:移除文件名[]与()(开头除外)

解决方案

问题分析

原脚本存在两个核心问题:

  1. 两次循环复用初始的$files集合,第一次重命名后集合内的文件信息未更新,导致第二次循环无法正确定位文件
  2. 未通过正则精准匹配非开头的[]()字符,且替换逻辑分散

修正后的脚本

$directory = "D:\files"

# 获取目标目录下的所有文件(如需处理子目录,添加 -Recurse 参数)
Get-ChildItem -Path $directory -File | ForEach-Object {
    # 1. 将空格替换为点号
    # 2. 将非开头的 []() 替换为点号
    $newName = $_.Name -replace ' ', '.' -replace '(?!^)[\[\]()]', '.'

    # 仅当新文件名与原文件名不同时执行重命名,避免无意义操作
    if ($newName -ne $_.Name) {
        Rename-Item -Path $_.FullName -NewName $newName -ErrorAction SilentlyContinue
    }
}

关键说明

  • 正则表达式(?!^)[\[\]()]:
    • (?!^):负向前瞻断言,确保匹配的字符不在文件名开头
    • [\[\]()]:匹配[、]、(、)这四个字符,其中[和]在正则字符集内无需额外转义
  • 单次循环处理:通过ForEach-Object直接迭代文件对象,实时获取文件当前状态,避免集合过期问题
  • 跳过重复命名:增加if判断,仅当文件名确实需要修改时执行重命名,减少错误触发

测试示例

处理后文件名
[测试].文件.123..txt
(demo)..test.v2..docx
普通文件名.tag..pdf

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:28:26