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

PowerShell需求:仅移动已按CSV重命名的顶层文件夹及内容

批量重命名并移动已处理文件夹的PowerShell脚本

核心逻辑

  1. 读取CSV里的OldName和NewName映射表,转成哈希表快速查找匹配项
  2. 遍历所有顶层文件夹,检查是否在映射表中有对应旧名称
  3. 匹配成功则先重命名顶层文件夹,再递归替换其子文件/文件夹的前缀
  4. 仅记录顶层文件夹重命名成功的路径,避免移动未处理或处理失败的项
  5. 最后统一将已成功重命名的文件夹移至目标目录

完整脚本

# 配置路径(自行修改为实际路径)
$csvPath = "C:\your\path\rename_rules.csv"
$sourceDir = "C:\your\source\folder"
$targetDir = "C:\your\target\folder"

# 创建目标目录(不存在则自动生成)
if (-not (Test-Path -Path $targetDir)) {
    New-Item -Path $targetDir -ItemType Directory | Out-Null
}

# 读取CSV映射,转成哈希表(OldName -> NewName)
$renameMap = @{}
Import-Csv -Path $csvPath | ForEach-Object {
    $renameMap[$_.OldName] = $_.NewName
}

# 存储已成功重命名的顶层文件夹路径
$processedFolders = @()

# 遍历顶层文件夹
Get-ChildItem -Path $sourceDir -Directory | ForEach-Object {
    $oldFolderName = $_.Name
    # 检查当前文件夹是否在映射表中
    if ($renameMap.ContainsKey($oldFolderName)) {
        $newFolderName = $renameMap[$oldFolderName]
        $newFolderPath = Join-Path -Path $sourceDir -ChildPath $newFolderName

        try {
            # 重命名顶层文件夹(失败则抛出异常)
            Rename-Item -Path $_.FullName -NewName $newFolderName -ErrorAction Stop
            Write-Host "完成顶层文件夹重命名: $oldFolderName -> $newFolderName"

            # 递归处理子文件/文件夹的前缀替换
            Get-ChildItem -Path $newFolderPath -Recurse | ForEach-Object {
                if ($_.Name -like "$oldFolderName*") {
                    $newItemName = $_.Name.Replace($oldFolderName, $newFolderName)
                    Rename-Item -Path $_.FullName -NewName $newItemName -ErrorAction SilentlyContinue
                    if ($?) {
                        Write-Host "完成子项重命名: $($_.Name) -> $newItemName"
                    }
                }
            }

            # 加入待移动列表
            $processedFolders += $newFolderPath
        }
        catch {
            Write-Warning "顶层文件夹重命名失败: $oldFolderName - $($_.Exception.Message)"
        }
    }
    else {
        Write-Host "无匹配映射规则,留存待排查: $oldFolderName"
    }
}

# 执行移动操作
if ($processedFolders.Count -gt 0) {
    Write-Host "开始移动已处理文件夹到目标目录..."
    $processedFolders | ForEach-Object {
        Move-Item -Path $_ -Destination $targetDir -ErrorAction Stop
        Write-Host "已移动: $_ -> $targetDir"
    }
}
else {
    Write-Host "没有已成功处理的文件夹需要移动"
}

关键细节说明

  • 哈希表优化查找:用哈希表存储CSV映射,避免每次遍历CSV查找,提升大量文件夹场景下的处理效率
  • 分层错误处理:顶层文件夹重命名强制捕获异常,确保只有完全成功的项才会被移动;子项重命名忽略个别失败,不中断整体流程
  • 精准移动控制:单独维护已处理文件夹列表,严格区分已完成重命名和未匹配/失败的项,避免误移动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:42:44