从文件名中删除字符串

从文件名中删除字符串

我们遇到过一种情况,需要从一大串文件名中批量删除一串字符。每个文件需要删除的字符串都是相同的,但我写不出一个可行的命令。我觉得这是由于文件名中包含的所有特殊字符造成的。这是我目前想到的办法,但效果不佳:

Get-ChildItem -Path 'E:\data\management\2016 401k Profit Sharing from Kesha.xlsx.id[8C00Ea7D-0001].[[电子邮件保护]].phobos'; | 重命名项目-新名称 { $_.FullName -replace “.id[8C00Ea7D-0001].[[电子邮件保护]].火卫一”,”” }

它运行命令时没有出现错误,但由于某种原因,它实际上并没有删除字符串“id[8C00Ea7D-0001]”。[[电子邮件保护]文件名末尾添加“].phobos”。

如您能提供任何帮助我们将不胜感激!

答案1

Replace 使用正则表达式,因此有几个字符需要用“\”进行转义才能按字面意思理解,至少在字符类之外:

  • 括号:[]
  • 括号: ()
  • 大括号: {}
  • 运算符:*、+、?、|
  • 锚点:^、$
  • 其他的: 。, \

将其用于单个项目,就像您问题中的项目一样:

 Get-ChildItem -LiteralPath 'E:\data\management\2016 401k Profit Sharing from Kesha.xlsx.id[8C00Ea7D-0001].[[email protected]].phobos' | Rename-Item -NewName {$_.Name -replace ".id\[8C00Ea7D-0001\]\.\[gabbiemciveen@aol\.com\]\.phobos"}

此外,将 LiteralPath 与 Get-ChildItem 结合使用,以确保没有字符被解释为通配符(如果存在)。

使用它来进行目录范围的重命名:

 Get-ChildItem -LiteralPath 'E:\data\management\' -Filter *[8C00Ea7D-0001].[[email protected]].phobos | Rename-Item -NewName {$_.Name -replace ".id\[8C00Ea7D-0001\]\.\[gabbiemciveen@aol\.com\]\.phobos"}

请注意,过滤器不使用正则表达式。

相关内容