从文件名中删除多个连续句点



我正在清理 SharePoint 迁移的文件共享,并且正在编写一个脚本来删除或替换文件名中不需要的字符。 我正在努力删除多个连续的句点(文件..例子.txt作为我正在处理的一个例子(。

我能够使用下面的简单替换脚本来处理所有其他令人反感的字符,但是在尝试替换双句点错误时脚本失败。

dir -recurse | rename-item -NewName {$_.name -replace ".." , ""}

我希望一个名称像文件的文件。示例.txt成为文件示例.txt,但是没有任何变化。

正如Matt在评论中提到的,-replace使用正则表达式。在正则表达式中,.字符是表示任何单个字符的通配符。要实际选择一个点,您必须使用 . .

用于选择具有两个或更多点的任何内容的正则表达式是..+(RegExr(

因此,您的命令应该是:

dir -Recurse | Rename-Item -NewName {$_.name -replace "..+" , ""}

但是,dirGet-ChildItem的别名。编写脚本时最好尽可能避免使用别名,因为它可能会造成脚本在某些环境中无法工作的情况。考虑到这一点,您的命令应该是:

Get-ChildItem -Recurse | Rename-Item -NewName {$_.name -replace "..+" , ""}

你可以改用 .replace((,而不必担心正则表达式。 请注意,重命名项正在使用延迟绑定脚本块 https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_parameters?view=powershell-5.1

Get-Childitem -Recurse -Filter *..* | 
  Rename-Item -NewName { $_.Name.Replace('..','.') } -WhatIf

最新更新