从整个目录结构中删除特殊字符

从整个目录结构中删除特殊字符

我想知道是否可以在 powershell 中从整个目录结构中的所有文件递归删除特殊字符?

例如如果我有一个名为的文件:

my presentation (fix).xlsx

我想将其重命名为:

my presentation fix.xlsx

谢谢你的指导。

我们需要这样做的原因是我们正在将许多文件迁移到 SharePoint 2010,而 SharePoint 不喜欢带有特殊字符的文件!

答案1

以下命令将递归遍历您的目录结构匹配,并针对每个匹配的文件或目录,使用 powershell 运算符将每个有问题的字符替换为空字符,对该文件执行重命名-replace

请注意,您必须创建一个与要过滤的所有常规字符匹配的正则表达式。为了匹配您提供的示例并删除圆括号,正则表达式将是:

$re = "[()]"

如果要添加方括号,则必须使用反斜杠将其转义:

$re = "[\[\]()]"

只需根据需要在外方括号之间继续添加字符:

$re = "[\[\]()!]"

这是脚本,请注意其中的舞蹈,以便-replace操作员在每次迭代时仅对名称的基本部分进行操作:

dir -Recurse | ?{$_.Name -match $re}  | %{ren -literalpath $_.FullName -newname (join-path (get-item $_.PSPArentPath) $($_.Name -replace $re,""))}

一些说明:

  • -LiteralPath命令中的参数需要ren能够用方括号替换文件:[] 它仅在 Powershell v3 IIRC 中可用。
  • 重命名后可能会出现名称冲突,此脚本无法处理该问题。

相关内容