我正在清理 SharePoint 迁移的文件共享,并且正在编写一个脚本来删除或替换文件名中不需要的字符。 我正在努力删除多个连续的句点(文件..例子.txt作为我正在处理的一个例子(。
我能够使用下面的简单替换脚本来处理所有其他令人反感的字符,但是在尝试替换双句点错误时脚本失败。
dir -recurse | rename-item -NewName {$_.name -replace ".." , ""}
我希望一个名称像文件的文件。示例.txt成为文件示例.txt,但是没有任何变化。
正如Matt在评论中提到的,-replace
使用正则表达式。在正则表达式中,.
字符是表示任何单个字符的通配符。要实际选择一个点,您必须使用 .
.
用于选择具有两个或更多点的任何内容的正则表达式是..+
(RegExr(
因此,您的命令应该是:
dir -Recurse | Rename-Item -NewName {$_.name -replace "..+" , ""}
但是,dir
是Get-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