PowerShell - 从多个文件名中删除特定字符串

PowerShell - Remove certain string from multiple filenames

我的目录中有多个 .mp3 文件,想从文件名中删除艺术家的名字。 所有文件的名称都包含字符串

"Adhesive Wombat - "

后面是歌曲的标题。 我想删除(而不是替换)当前文件夹中每个文件名中该特定字符串的每次出现。

更不用说,我已经在此站点上搜索了答案,但未能找到优雅且令人满意的解决方案。

这是我第一次接触 PowerShell。

如您所知,您所拥有的确实接近。

Dir | ren -NewName { $_.Name -replace "Adhesive Wombat - ", "" }

您添加了一项规定,即 "Adhesive Wombat" 可能包含也可能不包含 space。 -replace 使用正则表达式,所以让我们利用它和 make that space optional 使用 ?。我还将向您展示应该作为别名的完整 cmdlet 名称,以便您了解幕后发生的事情。很难看到,但我试图用粗体突出显示 ?,以便 "pop"。

获取子项 |重命名项目 -NewName {$_.Name -replace "Adhesive <b>?</b>Wombat - ", "" }

所以这将匹配两者

"other text Adhesive Wombat - other text "
"other text AdhesiveWombat - other text "

此外,根据有多少白色 space,你可以在你有 space 的地方使用 \s+,这将匹配所有连续的白色 space.

根据以上答案,简单复制和粘贴的快速工作示例适用于 win 10 Powershell:

  1. 将目录更改为目标目录
  2. 定义文件,例如*.txt 或设置所有文件 *.*
  3. 插入您的字符串以进行替换
cd C:\.... 
Get-ChildItem *.* | Rename-Item -NewName {$_.Name -replace "StringtoReplace", "newString"}