如何根据文本文件指定顺序批量重命名文件夹中的文件
按指定顺序批量重命名文件
没问题,我来帮你搞定这个按文本列表顺序批量重命名的需求!既然你已经熟悉单个文件的Rename-Item命令,那我们只需要把它和循环、文件读取结合起来就能实现批量操作。
实现思路
- 读取记录正确顺序的文本文件,提取每个文件名的排列序列
- 遍历这个序列,按索引(从1开始)给每个文件赋予新的序号名称
- 加入必要的存在性检查,避免因文件缺失或路径错误导致报错
PowerShell 脚本实现
下面是完整的可直接使用的脚本,你只需要替换对应的路径即可:
# ------------ 请修改这里的路径 ------------ # 存放待重命名文件的目标文件夹路径 $targetFolder = "C:\Your\Files\Folder" # 记录文件正确顺序的文本文件路径 $orderFile = "C:\Path\To\Your\file_order.txt" # ---------------------------------------- # 读取文本文件中的文件名,自动跳过空白行 $fileList = Get-Content -Path $orderFile | Where-Object { $_ -notmatch '^\s*$' } # 遍历列表,按顺序执行重命名 for ($index = 0; $index -lt $fileList.Count; $index++) { $oldFileName = $fileList[$index] # 生成新文件名:这里提供两种规则,选你需要的一种即可 # 规则1:去掉原扩展名,直接命名为纯序号(比如 car.json → 1) $newFileName = ($index + 1).ToString() # 规则2:保留原扩展名,命名为「序号+扩展名」(比如 car.json → 1.json) # $newFileName = ($index + 1).ToString() + [System.IO.Path]::GetExtension($oldFileName) # 拼接完整的旧文件路径和新文件路径 $oldFilePath = Join-Path -Path $targetFolder -ChildPath $oldFileName $newFilePath = Join-Path -Path $targetFolder -ChildPath $newFileName # 检查文件是否存在,避免无意义报错 if (Test-Path -Path $oldFilePath) { # 执行重命名,-Force 参数可覆盖同名文件(如果存在的话) Rename-Item -Path $oldFilePath -NewName $newFilePath -Force Write-Host "✅ 已完成重命名: $oldFileName → $newFileName" } else { Write-Warning "⚠️ 未找到文件: $oldFileName,请检查路径或文件名是否正确" } } Write-Host "`n🎉 重命名任务全部完成!"
使用说明
- 修改路径:把脚本里的
$targetFolder和$orderFile替换成你自己的实际路径 - 选择命名规则:根据你的需求注释/取消注释对应的
$newFileName行 - 测试优先:建议先找几个测试文件在临时文件夹里跑一遍脚本,确保效果符合预期
- 文本文件要求:确保你的顺序文本文件里每行一个文件名,不要有多余的空格或特殊字符
注意事项
- 如果文件名包含空格、中文或特殊字符,脚本依然可以正常工作,
Join-Path会自动处理路径拼接 -Force参数会强制覆盖同名文件,如果目标文件夹里已经有1、2这类序号命名的文件,会被替换,执行前请确认无重要文件重名
内容的提问来源于stack exchange,提问作者sourlemonaid




