PowerShell批量重命名如何替换文件名点号保留扩展名且正确处理带点文件夹
PowerShell批量替换文件名点号(区分文件与文件夹)解决方案
问题根因
原有代码的异常来自于PowerShell会为文件夹对象也自动计算BaseName和Extension属性:会把文件夹名称最后一个.之后的内容识别为扩展名,导致文件夹的完整名称被拆分,无法替换全部点号。
解决代码
针对文件和文件夹分别做逻辑判断处理即可实现需求:
# 可自行修改Replace方法的第二个参数为你需要的替换字符,比如空格' '、下划线'_'等 Get-ChildItem | Rename-Item -NewName { # 判断当前对象是否为文件夹 if ($_.PSIsContainer) { # 文件夹:替换完整名称中的所有点号 $_.Name.Replace(".", "-") } else { # 文件:仅替换扩展名前的点号,保留原扩展名 $_.BaseName.Replace(".", "-") + $_.Extension } }
补充说明
- 你习惯使用的
Dir是Get-ChildItem的别名,直接替换代码中的Get-ChildItem为Dir也可以正常运行 - 若需要批量处理当前目录及所有子目录下的内容,可给
Get-ChildItem添加-Recurse参数,建议同时搭配-Depth参数指定递归层级,避免层级过深出现误操作 - 正式执行前可添加
-WhatIf参数预览重命名结果,确认符合预期后再去掉该参数执行,示例:Get-ChildItem | Rename-Item -WhatIf -NewName { # 上述判断逻辑不变 }
内容的提问来源于stack exchange,提问作者KikeMcFLy
相关产品推荐
相关产品推荐

