PowerShell中如何给指定格式文件名扩展名前添加指定文本?
解决PowerShell批量给指定格式文件名添加(sample)的问题
原代码问题分析
你写的代码会重复添加扩展名,是因为$_.Name已经包含了完整的文件名(比如file1.mp4),再拼接$_.Extension就会变成file1.mp4(sample).mp4,导致扩展名重复。
正确解决方案
方法1:使用BaseName属性(推荐)
利用PowerShell文件对象的BaseName属性(不含扩展名的文件名)和Extension属性(带点的扩展名)拼接新文件名,同时支持MP4、MKV多种格式:
# 批量处理当前目录下的MP4和MKV文件 Get-ChildItem *.mp4, *.mkv | ForEach-Object { Rename-Item -Path $_.FullName -NewName "$($_.BaseName)(sample)$($_.Extension)" }
方法2:正则替换方式
通过正则表达式匹配文件名的扩展名部分,替换为(sample)+扩展名,写法更简洁:
# 预览重命名效果(-WhatIf参数可先验证,确认后删除) Get-ChildItem *.mp4, *.mkv | Rename-Item -NewName { $_.Name -replace '(\.[^.]+)$', '(sample)$1' } -WhatIf # 实际执行(去掉-WhatIf) Get-ChildItem *.mp4, *.mkv | Rename-Item -NewName { $_.Name -replace '(\.[^.]+)$', '(sample)$1' }
额外注意事项
- 使用
$_.FullName而非$_.Name:如果脚本运行目录不是目标文件所在目录,Name可能导致文件找不到,FullName是完整路径更可靠。 -WhatIf参数:建议先添加该参数预览重命名结果,确认无误后再执行实际重命名操作,避免误改文件。- 处理子目录文件:如果需要递归处理所有子目录里的目标格式文件,给
Get-ChildItem加上-Recurse参数即可。
内容的提问来源于stack exchange,提问作者arsaces
相关产品推荐
相关产品推荐

