PowerShell批量重命名文件有四种基础方法:一、用Rename-Item+ForEach-Object加前缀或序号;二、用哈希表精准映射替换;三、用正则表达式处理括号、连字符等模式;四、封装参数化.ps1脚本提升复用性与安全性。
按规则批量重命名文件(基础模式)
powershell 通过 get-childitem 获取文件,再用 rename-item 逐个修改名称,是最直接的批量重命名方式。关键在于构造新文件名的逻辑——通常结合 $_.basename(原文件名不含扩展名)和 $_.extension(扩展名)来拼接。
例如:把当前目录下所有 .txt 文件统一加上前缀 backup_:
Get-ChildItem *.txt | ForEach-Object {
$newName = "backup_" + $_.BaseName + $_.Extension
Rename-Item $_.FullName $newName
}
按序号重命名(如 photo_001.jpg、photo_002.jpg)
适合整理截图、照片等无意义原名的场景。需借助计数器变量,并用 -f 格式化保证编号位数统一(如 001 而非 1)。
注意:建议先用 -WhatIf 参数预览操作,确认无误再执行真实重命名。
$i = 1
Get-ChildItem *.jpg | Sort-Object LastWriteTime | ForEach-Object {
$newName = "photo_{0:000}{1}" -f $i, $_.Extension
Rename-Item $_.FullName $newName -WhatIf
$i++
}
替换文件名中的特定字符串
使用 -replace 操作符可安全替换文件名中任意子串,它默认不区分大小写且支持正则。若只需简单字面替换,加 [regex]::Escape() 可避免特殊字符(如 .、*、)被误解析。
- 把所有文件名里的空格替换成下划线:
$_.BaseName -replace ' ', '_' - 把 old_project 替换为 new_project(转义点号):
$_.BaseName -replace [regex]::Escape('old.project'), 'new_project' - 删除文件名开头的数字和短横线(如 123-Report.docx → Report.docx):
$_.BaseName -replace '^d+-', ''
避免覆盖与权限问题的实用建议
批量重命名最常出错的是目标名重复或路径非法。PowerShell 不会自动跳过冲突,必须主动检查。
- 用 Test-Path 判断新文件名是否已存在,存在则跳过或追加时间戳
- 文件名含 Windows 禁止字符(
: " / | ? *)会导致失败,可用正则提前清理:$cleanName = $_.BaseName -replace '[:"/\|?*]', '_' - 对系统保护目录(如 C:Windows)操作需以管理员身份运行 PowerShell,否则 Rename-Item 会报“拒绝访问”
- 建议始终在 同一目录 下操作;跨驱动器重命名实际是移动+重命名,应改用 Move-Item


















