PowerShell批量重命名:如何利用Split分割结果实现文件重命名
PowerShell批量重命名:如何利用Split分割结果实现文件重命名
嗨,你已经完成了最关键的一步——成功提取出了想要的新文件名格式!现在只需要把输出新名称的步骤换成实际的重命名命令就搞定啦,我来帮你调整代码:
首先,你原来用Get-ChildItem -Name拿到的只是文件名的字符串,其实直接用Get-ChildItem(不带-Name)会更方便,因为它返回的是文件对象,能直接获取文件的完整路径,避免路径相关的问题。
修改后的核心代码如下:
Get-ChildItem | foreach { # 分割当前文件的文件名(注意用$_.Name而不是$_,因为$_现在是文件对象) $stringParts = $_.Name.split(" _ ") # 拼接你想要的新文件名 $newName = $stringParts[0] + " _ " + $stringParts[2] # 执行重命名:$_.FullName是原文件的完整路径,$newName是新名称 Rename-Item -Path $_.FullName -NewName $newName }
几个实用的小提示:
- 先测试再执行:在
Rename-Item后面加上-WhatIf参数,比如Rename-Item -Path $_.FullName -NewName $newName -WhatIf,这样不会实际修改文件名,只会在控制台显示要执行的重命名操作,确认所有新名称都符合预期后,再去掉-WhatIf真正执行。 - 避免格式错误报错:如果有些文件名不符合
[内容] _ [内容] _ [内容]的格式,分割后可能没有索引为2的元素,这时会报错。可以加个判断,跳过格式不对的文件:Get-ChildItem | foreach { $stringParts = $_.Name.split(" _ ") if ($stringParts.Count -ge 3) { $newName = $stringParts[0] + " _ " + $stringParts[2] Rename-Item -Path $_.FullName -NewName $newName -WhatIf } else { Write-Warning "文件 '$($_.Name)' 格式不符合要求,跳过重命名" } } - 处理子文件夹文件:如果需要递归处理子文件夹里的文件,只需要给
Get-ChildItem加上-Recurse参数即可。
这样你就能顺利批量重命名文件啦!
备注:内容来源于stack exchange,提问作者KoKee




