使用PowerShell移除文件扩展名报错:双.txt后缀文件重命名失败
解决PowerShell重命名双.txt扩展名文件的报错问题
原脚本的错误原因
-Name参数导致对象丢失:添加-Name后,Get-ChildItem仅返回纯文件名字符串,而非完整的FileInfo对象,因此$_.BaseName属性为空,传给Rename-Item时就会触发路径为空的报错。Rename-Item用法错误:即便拿到正确的文件对象,原脚本仅传入新名称,未指定要重命名的文件路径,不符合命令语法要求。
正确的解决脚本
方案一:精准筛选双.txt扩展名文件
直接用过滤器匹配目标文件,只处理xxx.txt.txt格式的文件:
Get-ChildItem -Filter *.txt.txt -Recurse -File | ForEach-Object { Rename-Item -Path $_.FullName -NewName $_.BaseName }
解释:$_.FullName提供文件的完整路径(确保Rename-Item能准确定位文件),$_.BaseName会自动去掉最后一个.txt扩展名(比如file1.txt.txt的BaseName就是file1.txt),刚好满足需求。
方案二:灵活筛选目标文件
如果需要先遍历所有.txt文件,再过滤出双扩展名的文件,用这个脚本:
Get-ChildItem -Filter *.txt -Recurse -File | Where-Object { $_.BaseName -match '\.txt$' } | ForEach-Object { Rename-Item -Path $_.FullName -NewName $_.BaseName }
解释:Where-Object的条件会筛选出BaseName本身以.txt结尾的文件(即原文件为xxx.txt.txt),再执行重命名操作。
安全测试提示
如果担心误操作,可以先添加-WhatIf参数预览执行效果,确认无误后再去掉该参数:
Get-ChildItem -Filter *.txt.txt -Recurse -File | ForEach-Object { Rename-Item -Path $_.FullName -NewName $_.BaseName -WhatIf }
内容的提问来源于stack exchange,提问作者Beginner_Scripter
相关产品推荐
相关产品推荐

