Powershell使用-LiteralPath替换子目录中文件中的字符

Powershell使用-LiteralPath替换子目录中文件中的字符,powershell,Powershell,我想替换所有子目录中文件名中的错误字符。但是,由于使用“[”(通配符)重命名项的限制,我必须使用 -命令中的LiteralPath。这意味着我在使用子目录运行时遇到问题 下面的代码适用于当前目录,但我无法确定如何调整此代码以重命名所有子目录中的文件。请帮助 ls *.* -recurse | % { Move-Item -literalpath $_.fullname ` ($_.name -replace "[()\[\]]|\.(?!\w{3}$)", " ") } 您的正则表达式将从扩展

我想替换所有子目录中文件名中的错误字符。但是,由于使用“[”(通配符)重命名项的限制,我必须使用 -命令中的LiteralPath。这意味着我在使用子目录运行时遇到问题

下面的代码适用于当前目录,但我无法确定如何调整此代码以重命名所有子目录中的文件。请帮助

ls *.* -recurse | % { Move-Item -literalpath $_.fullname `
($_.name -replace "[()\[\]]|\.(?!\w{3}$)", " ") }

您的正则表达式将从扩展中删除不完全为3个字符的点

.h
.cs
.html
我建议在BaseName中替换并附加扩展名,并且仅当存在括号/圆括号/圆点字符时

Get-ChildItem *.* -Recurse -File|
  Where-Object {$_.BaseName -match '[()\[\]\.]'}|
    Rename-Item -NewName {($_.BaseName -replace '[()\[\]\.]',' ')+$_.Extension} -Whatif

如果输出看起来正常,请删除
-WhatIf

ls*-Recurse | Move Item{$.Name-replace'[()\[\]].\.(?!\w{3}$),'}
将对象从
ls
隐式绑定到
Move Ite-LiteralPath$.PSPath
,无需使用
%//code>