我想替换所有子目录中文件名中的错误字符。但是由于使用'['(外卡)重命名项目的限制,我必须使用 -LiteralPath在命令中。这意味着我遇到了使用子目录运行它的问题。
下面的代码适用于当前目录,但我无法弄清楚如何调整此代码以重命名所有子目录中的文件。请帮帮忙?
ls *.* -recurse | % { Move-Item -literalpath $_.fullname `
($_.name -replace "[()\[\]]|\.(?!\w{3}$)", " ") }
答案 0 :(得分:1)
您的RegEx将从不具有3个字符的扩展中删除点。
.h
.cs
.html
我建议替换BaseName并附加扩展名,并且仅当括号/圆括号/点字符存在时才会添加。
Get-ChildItem *.* -Recurse -File|
Where-Object {$_.BaseName -match '[()\[\]\.]'}|
Rename-Item -NewName {($_.BaseName -replace '[()\[\]\.]',' ')+$_.Extension} -Whatif
如果输出看起来没问题,请删除-WhatIf
。