PowerShell递归批量重命名文件:多文本单次替换方案问询
批量文件名多组替换的高效PowerShell方案
针对大量文件的批量重命名需求,你可以通过一次遍历文件系统+多轮替换的方式提升效率,避免重复递归扫描。以下是两种可行实现:
方案1:链式调用Replace方法(适合少量替换规则)
直接在-NewName的脚本块中连续调用String.Replace方法,依次完成多组文本替换,仅需一次文件遍历:
Get-ChildItem -Recurse -Include *.* | Rename-Item -NewName { $_.Name.Replace("__a1", "__a2").Replace("__b1", "__b2").Replace("__c1", "__c2") } -WhatIf
- 说明:
String.Replace会返回修改后的字符串,因此可以链式调用,按顺序完成所有替换规则 -WhatIf参数用于预览重命名结果,确认无误后可移除该参数执行实际修改
方案2:哈希表定义替换规则(适合大量替换规则)
用哈希表统一管理所有替换规则,通过循环完成批量替换,规则维护更便捷:
# 定义替换规则:键=待替换的旧文本,值=替换后的新文本 $replaceRules = @{ "__a1" = "__a2" "__b1" = "__b2" "__c1" = "__c2" # 可按需添加更多替换规则 } Get-ChildItem -Recurse -Include *.* | Rename-Item -NewName { $newName = $_.Name foreach ($rule in $replaceRules.GetEnumerator()) { $newName = $newName.Replace($rule.Key, $rule.Value) } $newName } -WhatIf
- 说明:PowerShell默认哈希表无序,若需指定替换顺序,可改用有序哈希表
[ordered]@{}定义规则 - 若需包含无扩展名文件,可将
-Include *.*改为-Include *或直接移除该参数
内容的提问来源于stack exchange,提问作者WOEWE
相关产品推荐
相关产品推荐

