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

使用PowerShell读取CSV/TXT文件实现批量文件重命名

PowerShell 基于CSV/TXT映射规则的批量重命名脚本

规则文件准备

脚本支持CSV和TXT两种格式的规则文件,格式要求统一:

  • 每行代表一条重命名规则
  • 每行用英文逗号分隔两部分内容:逗号前是要匹配的文件名关键词/完整名称(对应CSV A列),逗号后是重命名后的目标名称(对应CSV B列)
  • 空行、缺少任意一部分的无效行会被自动跳过

示例规则文件内容:

blah,.BackupFile
report_2024Q1,2024年第一季度运营报告
old_project_archive,已归档项目资料

完整实现脚本

脚本兼容原有固定匹配逻辑,同时增加了重名冲突处理、规则校验、遍历异常规避的优化,代码如下:

# -------------------------- 按需修改配置项 --------------------------
$scanPath = "C:\你的目标文件存放目录"  # 替换为实际要扫描的文件夹路径,不建议直接扫整个C盘
$ruleFilePath = "C:\rename_rules.csv" # 规则文件存放路径,支持.csv/.txt格式
$recursiveScan = $true # 是否递归扫描所有子文件夹
$matchMode = "fuzzy"  # 匹配模式:fuzzy=模糊匹配(文件名包含匹配串即命中,和原有逻辑一致);exact=精确匹配(文件名完全等于匹配串才命中)
# -------------------------------------------------------------------

# 加载并校验规则
$renameRules = @()
if (-not (Test-Path $ruleFilePath)) {
    Write-Error "规则文件不存在,请检查路径配置:$ruleFilePath"
    exit 1
}
$validLines = Get-Content $ruleFilePath -Encoding UTF8 | Where-Object { $_.Trim() -ne "" }
foreach ($line in $validLines) {
    # 只按第一个逗号分割,避免新名称里带逗号被错误切分
    $ruleParts = $line -split ',', 2
    if ($ruleParts.Count -eq 2 -and $ruleParts[0].Trim() -and $ruleParts[1].Trim()) {
        $renameRules += [PSCustomObject]@{
            MatchStr = $ruleParts[0].Trim()
            ReplaceStr = $ruleParts[1].Trim()
        }
    }
}
if ($renameRules.Count -eq 0) {
    Write-Error "未读取到有效重命名规则,请检查规则文件格式"
    exit 1
}

# 先一次性拉取所有待扫描文件,避免遍历过程中重命名导致的枚举异常
$allTargetFiles = Get-ChildItem -Path $scanPath -File -Recurse:$recursiveScan -ErrorAction SilentlyContinue

foreach ($file in $allTargetFiles) {
    foreach ($rule in $renameRules) {
        $hit = $false
        # 按配置的模式做匹配判断
        if ($matchMode -eq "fuzzy") {
            if ($file.Name -like "*$($rule.MatchStr)*") { $hit = $true }
        } else {
            # 精确匹配默认不带扩展名,需要匹配带扩展名的完整文件名就把下面的比较值换成$file.Name
            if ([System.IO.Path]::GetFileNameWithoutExtension($file.FullName) -eq $rule.MatchStr) { $hit = $true }
        }

        if ($hit) {
            # --- 下面是重命名逻辑,可根据自己的需求调整 ---
            # 默认逻辑:新名称=规则里的替换名+原文件扩展名
            $newFileName = $rule.ReplaceStr + $file.Extension

            # 如果要实现原来的「保留原文件名追加后缀」逻辑,把上面一行注释掉,放开下面这行
            # $newFileName = [System.IO.Path]::GetFileNameWithoutExtension($file.FullName) + $rule.ReplaceStr + $file.Extension

            # 重名自动加数字后缀,避免覆盖文件
            $savePath = Join-Path $file.DirectoryName $newFileName
            $dupIndex = 1
            while (Test-Path $savePath) {
                $newFileName = "$($rule.ReplaceStr)_$dupIndex$($file.Extension)"
                # 用追加后缀逻辑的话,上面一行替换成下面这行
                # $newFileName = [System.IO.Path]::GetFileNameWithoutExtension($file.FullName) + "$($rule.ReplaceStr)_$dupIndex" + $file.Extension
                $savePath = Join-Path $file.DirectoryName $newFileName
                $dupIndex++
            }
            # 执行重命名
            Rename-Item -Path $file.FullName -NewName $newFileName -ErrorAction SilentlyContinue
            Write-Host "重命名完成:$($file.Name) -> $newFileName"
            # 命中一条规则就终止后续匹配,避免重复改名
            break
        }
    }
}

使用注意事项

  • 首次运行建议先把Rename-Item那行注释掉,执行脚本看控制台输出的重命名结果是否符合预期,确认无误后再放开执行,避免误改文件。
  • 规则文件保存时请选择UTF8编码,避免中文匹配、中文名称乱码。
  • 精确匹配默认判断不带扩展名的文件名,如果需要匹配带扩展名的完整文件名,修改对应判断逻辑的比较值即可。
  • 尽量不要直接扫描整个C盘,系统目录文件被误改可能导致系统运行异常,建议指定具体的工作目录执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:57:26