
如果您需要在Windows系统中批量修改大量文件的名称,PowerShell提供了高效且灵活的命令行方式。以下是使用Rename-Item配合正则表达式实现多种批量重命名场景的具体操作步骤:
一、基础语法与变量准备
Rename-Item是PowerShell内置命令,用于重命名单个或多个文件;结合Get-ChildItem可遍历目标目录,再通过ForEach-Object调用Rename-Item,并利用正则表达式(-replace)动态生成新文件名。所有操作均需在具有读写权限的目录下执行。
1、以管理员身份打开PowerShell窗口。
2、使用Set-Location命令切换至目标文件夹,例如:Set-Location “C:\MyFiles”。
3、运行Get-ChildItem确认待处理文件列表,例如:Get-ChildItem *.txt。
二、替换文件名中指定字符串
该方法适用于将文件名中某固定子串统一替换成另一字符串,如将所有“old”改为“new”,不区分大小写且支持通配匹配。
1、执行以下命令:Get-ChildItem *.log | ForEach-Object { Rename-Item $_.FullName $_.Name.Replace(“error”, “warning”) }。
2、若需忽略大小写,改用正则表达式:Get-ChildItem *.log | ForEach-Object { Rename-Item $_.FullName ($_.Name -replace “(?i)error”, “warning”) }。
3、验证结果:再次运行Get-ChildItem查看文件名是否已更新。
三、按序号重命名并补零
该方法适用于将无序文件按原始顺序重新编号,如将“IMG_001.jpg”、“abc.png”等统一改为“photo_001.jpg”、“photo_002.png”,确保序号对齐且位数一致。
1、定义计数器变量:$i = 1。
2、执行重命名循环:Get-ChildItem *.* | ForEach-Object { $newName = “photo_{0:D3}{1}” -f $i++, $_.Extension; Rename-Item $_.FullName $newName }。
3、注意:此操作依赖Get-ChildItem默认返回顺序(通常为文件系统排序),如需按时间或名称排序,需先添加Sort-Object参数。
四、提取并保留文件名中特定模式部分
该方法适用于从复杂文件名中提取符合正则规则的部分作为新名称,例如从“Report_Q3_2023_v2_final.pdf”中仅保留“Q3_2023.pdf”。
1、编写匹配逻辑:$pattern = ‘Report_(Q\d{1,2}_\d{4})[^.]*\.(\w+)$’。
2、执行提取重命名:Get-ChildItem *.pdf | ForEach-Object { if ($_.Name -match $pattern) { $newName = “$($matches[1]).$($matches[2])”; Rename-Item $_.FullName $newName } }。
3、检查$matches变量内容可确认捕获组是否正确匹配,避免误删关键信息。
五、添加前缀或后缀
该方法适用于统一为所有文件添加时间戳、项目代号等标识,如在每个文件名前加上“[2024]”或在末尾追加“_backup”。
1、添加前缀示例:Get-ChildItem *.docx | ForEach-Object { Rename-Item $_.FullName (“[2024]” + $_.Name) }。
2、添加后缀示例:Get-ChildItem *.xlsx | ForEach-Object { Rename-Item $_.FullName ($_.BaseName + “_backup” + $_.Extension) }。
3、若需防止重复命名冲突,可先用Test-Path检查目标文件是否存在,再决定是否跳过或覆盖。

评论(0)