PowerShell需求:仅移动已按CSV重命名的顶层文件夹及内容
批量重命名并移动已处理文件夹的PowerShell脚本
核心逻辑
- 读取CSV里的
OldName和NewName映射表,转成哈希表快速查找匹配项 - 遍历所有顶层文件夹,检查是否在映射表中有对应旧名称
- 匹配成功则先重命名顶层文件夹,再递归替换其子文件/文件夹的前缀
- 仅记录顶层文件夹重命名成功的路径,避免移动未处理或处理失败的项
- 最后统一将已成功重命名的文件夹移至目标目录
完整脚本
# 配置路径(自行修改为实际路径) $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
相关产品推荐
相关产品推荐

