如何批量删除文件名末尾n个字符?PowerShell脚本执行无结果求助
问题分析与解决方法
你的脚本没生效的核心问题是错误使用了TrimEnd方法:
- PowerShell的字符串
TrimEnd()方法是用来移除末尾指定的字符集合,而非固定长度的字符。你传入数字2的用法完全不符合该方法的要求,导致操作无效果。 - 另外,直接操作
$_.Name会把扩展名也包含进去,即便TrimEnd用法正确,也可能破坏文件扩展名。
正确的脚本写法
方法1:按固定长度截取文件名(通用移除末尾2个字符)
适用于所有需要去掉文件名部分最后2个字符的场景:
Get-ChildItem | Rename-Item -NewName { $_.BaseName.Substring(0, $_.BaseName.Length - 2) + $_.Extension }
$_.BaseName:获取不带扩展名的文件名(比如a01mm)Substring(0, 长度-2):截取前n-2个字符,得到a01- 拼接原扩展名
$_.Extension(即.txt),最终得到a01.txt
方法2:正则精准替换(针对末尾的mm)
如果只需要移除文件名末尾的mm,用正则匹配更精准:
Get-ChildItem | Rename-Item -NewName { $_.Name -replace 'mm\.txt$', '.txt' }
或者针对文件名部分替换:
Get-ChildItem | Rename-Item -NewName { ($_.BaseName -replace 'mm$', '') + $_.Extension }
内容的提问来源于stack exchange,提问作者Michael van Zuuren
相关产品推荐
相关产品推荐

