从文件名中删除多个连续的期间

时间:2019-05-28 19:26:56

标签: powershell

我正在为SharePoint迁移清理文件共享,并且正在编写脚本来删除或替换文件名中不需要的字符。我正在努力删除多个连续的时间段(以file..example.txt作为我正在处理的示例)。

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

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

我希望文件名为..example.txt之类的文件成为fileexample.txt,但是什么都不会改变。

2 个答案:

答案 0 :(得分:0)

正如马特在评论中所述,-replace使用正则表达式。在正则表达式中,.字符是代表任何单个字符的通配符。要实际选择一个点,必须使用\.

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

因此,您的命令应为:

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

但是,dirGet-ChildItem的别名。在编写脚本时尽可能避免别名的做法是一个好习惯,因为这可能会导致脚本在某些环境下无法正常工作。考虑到这一点,您的命令应为:

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

答案 1 :(得分:0)

您可以改用.replace(),而不必担心正则表达式。请注意,Rename-Item正在使用延迟绑定脚本块https://docs.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