批量重命名技巧:使用PowerShell一键整理图片文件命名规范
文章目录
- 场景背景
- 问题分析
- 解决方案
- 方案一:完整的PowerShell脚本
- 方案二:简洁的单行命令
- 技术解析
- 核心代码逻辑
- 正则表达式详解
- 安全操作指南
- 预览模式(推荐先使用)
- 操作步骤
- 扩展应用
- 适配不同前缀
- 保留更多信息
- 经验总结
- 适用场景
场景背景
在日常工作和学习中,我们经常会遇到需要批量重命名文件的情况。最近我在整理一套图片素材时遇到了这样一个需求:将名为 CDZCQ_500×263_0001.jpg
、CDZCQ_500×263_0002.png
等格式的文件,统一重命名为 CDZCQ_1.jpg
、CDZCQ_2.png
这样的简洁格式。
这种命名模式常见于:
- 从设计软件导出的序列帧图片
- 相机连拍生成的序列文件
- 网络爬虫下载的批量图片
- 视频剪辑导出的帧序列
问题分析
原始文件名模式:CDZCQ_500×263_0001
CDZCQ
:文件前缀标识500×263
:图片尺寸信息(需要移除)0001
:序列号(需要去除前导零)
目标文件名模式:CDZCQ_1
- 保留核心前缀
- 移除冗余的尺寸信息
- 简化序列号格式
解决方案
方案一:完整的PowerShell脚本
# 批量重命名图片文件脚本
# 将 CDZCQ_500×263_0001 格式重命名为 CDZCQ_1 格式# 设置要处理的文件夹路径
$folderPath = "C:\Your\Folder\Path" # 请修改为你的实际文件夹路径# 进入目标文件夹
Set-Location $folderPath# 获取所有符合条件的文件
$files = Get-ChildItem -File | Where-Object { $_.Name -match "^CDZCQ_500×263_\d+" }Write-Host "找到 $($files.Count) 个需要重命名的文件" -ForegroundColor Green# 遍历并重命名文件
foreach ($file in $files) {# 使用正则表达式提取数字部分if ($file.Name -match "CDZCQ_500×263_(\d+)") {$number = $matches[1]# 去除前导零,比如 0001 变成 1$cleanNumber = [int]$number# 构建新文件名(保持原扩展名)$newName = "CDZCQ_$cleanNumber" + $file.Extension# 重命名文件try {Rename-Item -Path $file.FullName -NewName $newNameWrite-Host "重命名成功: $($file.Name) -> $newName" -ForegroundColor Yellow}catch {Write-Host "重命名失败: $($file.Name)" -ForegroundColor RedWrite-Host "错误信息: $($_.Exception.Message)" -ForegroundColor Red}}
}Write-Host "重命名完成!" -ForegroundColor Green
方案二:简洁的单行命令
对于熟悉PowerShell的用户,可以使用这个紧凑版本:
Get-ChildItem "CDZCQ_500×263_*" | ForEach-Object { $newName = "CDZCQ_$([int]($_.BaseName -replace '.*_'))$($_.Extension)"; Rename-Item $_.Name $newName }
技术解析
核心代码逻辑
-
文件筛选:
$files = Get-ChildItem -File | Where-Object { $_.Name -match "^CDZCQ_500×263_\d+" }
使用正则表达式匹配目标文件模式
-
数字提取与处理:
if ($file.Name -match "CDZCQ_500×263_(\d+)") {$number = $matches[1]$cleanNumber = [int]$number # 自动去除前导零 }
-
安全重命名:
try {Rename-Item -Path $file.FullName -NewName $newName } catch {# 异常处理 }
正则表达式详解
^CDZCQ_500×263_
:匹配以"CDZCQ_500×263_"开头的字符串(\d+)
:匹配一个或多个数字,并捕获为分组$matches[1]
:获取第一个捕获组的内容(即数字部分)
安全操作指南
预览模式(推荐先使用)
在执行实际重命名前,建议先运行预览版本确认效果:
# 预览模式 - 只显示将要重命名的文件,不实际执行
$folderPath = "C:\Your\Folder\Path"
Set-Location $folderPath$files = Get-ChildItem -File | Where-Object { $_.Name -match "^CDZCQ_500×263_\d+" }Write-Host "预览模式 - 将要重命名的文件:" -ForegroundColor Cyanforeach ($file in $files) {if ($file.Name -match "CDZCQ_500×263_(\d+)") {$number = $matches[1]$cleanNumber = [int]$number$newName = "CDZCQ_$cleanNumber" + $file.ExtensionWrite-Host "$($file.Name) -> $newName" -ForegroundColor White}
}Write-Host "`n以上是预览,要实际执行重命名请使用完整脚本。" -ForegroundColor Yellow
操作步骤
- 备份原始文件:在执行任何批量操作前,建议先复制一份原始文件
- 修改路径:将脚本中的
$folderPath
变量改为你的实际文件夹路径 - 测试运行:先使用预览模式确认重命名效果
- 正式执行:确认无误后运行完整脚本
扩展应用
这个脚本可以轻松适配其他命名模式。比如:
适配不同前缀
# 对于 "IMG_1920x1080_001.jpg" → "IMG_1.jpg"
if ($file.Name -match "^IMG_\d+x\d+_(\d+)") {$newName = "IMG_$([int]$matches[1])" + $file.Extension
}
保留更多信息
# 如果想保留尺寸信息:CDZCQ_500×263_1.jpg
if ($file.Name -match "^CDZCQ_(\d+x\d+)_(\d+)") {$size = $matches[1]$number = [int]$matches[2]$newName = "CDZCQ_${size}_$number" + $file.Extension
}
经验总结
- 正则表达式是关键:掌握基本的正则表达式能极大提高文件处理效率
- 先预览后执行:批量操作前务必先确认效果,避免不可逆的修改
- 错误处理很重要:添加异常处理确保脚本的健壮性
- 灵活适配需求:理解脚本原理后可以轻松修改以适应不同场景
适用场景
这个技巧适用于:
- 🖼️ 图片素材整理
- 📹 视频帧序列处理
- 📄 文档批量重命名
- 🎨 设计资源管理
- 🔧 项目文件整理
您好,我是肥晨。
欢迎关注我获取前端学习资源,日常分享技术变革,生存法则;行业内幕,洞察先机。