Powershell使用-LiteralPath

时间:2017-09-03 18:53:22

标签: powershell

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

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

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

1 个答案:

答案 0 :(得分:1)

您的RegEx将从不具有3个字符的扩展中删除点。

.h
.cs
.html

我建议替换BaseName并附加扩展名,并且仅当括号/圆括号/点字符存在时才会添加。

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

如果输出看起来没问题,请删除-WhatIf