如何使用Rename-Item批量重命名文件实现文件名词语位置互换
批量重命名实现方案
核心逻辑:提取不含扩展名的文件主体名,按空格分割为独立词组数组,按需调整数组内元素顺序后重新拼接为新文件名,调用Rename-Item完成重命名操作。
场景1:固定位置词语互换(匹配示例需求)
针对你举的ABCD 12550.txt重命名为12550 ABCD.txt这类固定位置词组互换的需求,可直接使用以下脚本:
# 先切换到待处理文件所在的目录 cd "C:\替换为你的文件实际存储路径" # 筛选当前目录下的txt文件,如需处理所有文件可删除-Filter参数 Get-ChildItem -File -Filter *.txt | ForEach-Object { # 按空格拆分主体文件名,自动兼容连续多空格的情况 $nameSegments = $_.BaseName -split '\s+' # 仅当文件名拆分后至少有2段词组时执行操作,避免误改单段名称的文件 if ($nameSegments.Count -ge 2) { # 调整词组顺序:示例为第2段移到最前,第1段移到第2位,后续词组保持原顺序 $newBaseName = ($nameSegments[1], $nameSegments[0] + $nameSegments[2..($nameSegments.Count-1)]) -join ' ' # 拼接扩展名生成完整新文件名 $newFullName = "$newBaseName$($_.Extension)" # 加-WhatIf参数时仅预览重命名结果,确认无误后删除该参数即可实际执行 Rename-Item -Path $_.FullName -NewName $newFullName -WhatIf } }
注意:首次运行请保留-WhatIf参数,控制台会输出所有文件的新旧名称对照,确认结果完全符合预期后,移除-WhatIf再运行脚本即可完成实际重命名。
场景2:指定词语移动到文件名末尾
如果需要把某个固定关键词统一移动到所有匹配文件的文件名末尾,可使用以下脚本:
# 切换到待处理文件所在目录 cd "C:\替换为你的文件实际存储路径" # 定义需要移动到末尾的目标词语 $moveToEndWord = "替换为你要移动的指定词语" Get-ChildItem -File | ForEach-Object { $nameSegments = $_.BaseName -split '\s+' # 仅处理文件名中包含目标词语的文件 if ($nameSegments -contains $moveToEndWord) { # 拆分出除目标词外的其余词组,保持原有顺序 $remainSegments = $nameSegments | Where-Object { $_ -ne $moveToEndWord } # 其余词组在前,目标词拼在末尾 $newBaseName = ($remainSegments + $moveToEndWord) -join ' ' $newFullName = "$newBaseName$($_.Extension)" Rename-Item -Path $_.FullName -NewName $newFullName -WhatIf } }
自定义调整说明
- 如需递归处理子文件夹内的所有文件,给
Get-ChildItem命令添加-Recurse参数即可 - 词组顺序可通过调整
$nameSegments的数组索引自由定义,支持任意位置的词组互换、前移、后移操作 - 脚本默认按单个/多个连续空格作为词组分隔符,和你描述的文件名命名规则完全匹配
内容的提问来源于stack exchange,提问作者autopilot1
相关产品推荐
相关产品推荐

