我正在为SharePoint迁移清理文件共享,并且正在编写脚本来删除或替换文件名中不需要的字符。我正在努力删除多个连续的时间段(以file..example.txt作为我正在处理的示例)。
我能够使用下面的简单替换脚本来处理所有其他令人反感的字符,但是当尝试替换双倍周期错误时,脚本将失败。
dir -recurse | rename-item -NewName {$_.name -replace ".." , ""}
我希望文件名为..example.txt之类的文件成为fileexample.txt,但是什么都不会改变。
答案 0 :(得分:0)
正如马特在评论中所述,-replace
使用正则表达式。在正则表达式中,.
字符是代表任何单个字符的通配符。要实际选择一个点,必须使用\.
。
用于选择具有两个或多个点的任何内容的正则表达式为\.\.+
(RegExr)
因此,您的命令应为:
dir -Recurse | Rename-Item -NewName {$_.name -replace "\.\.+" , ""}
但是,dir
是Get-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