删除多个文件中的重复文本

时间:2018-03-24 18:31:27

标签: powershell repeat

在包含多个单独音乐文件的文件夹中,专辑和乐队名称的名称出现在歌曲#和标题之前(例如Band_Name_Album_Name_01_Song_Title.mp3)。文件夹中的每个曲目都以这种方式标题。是否有一个powershell命令可用于删除重复的乐队名称和专辑名称,以便只保留曲目编号和歌曲名称?

我想更改以下文件夹:

Band_Name_Album_Name_01_Song_Title1.mp3

Band_Name_Album_Name_02_Song_Title2.mp3

Band_Name_Album_Name_03_Song_Title3.mp3

Band_Name_Album_Name_04_Song_Title4.mp3

Band_Name_Album_Name_05_Song_Title5.mp3

Band_Name_Album_Name_06_Song_Title6.mp3

对此:

01_Song_Title1.mp3

02_Song_Title2.mp3

03_Song_Title3.mp3

04_Song_Title4.mp3

05_Song_Title5.mp3

06_Song_Title6.mp3

注意:如果只有一个文件夹但是有多个文件夹,我会手动执行此操作。

2 个答案:

答案 0 :(得分:0)

如果文件名一致,则以下工作。

删除" -recurse"切换,如果它不需要通过子文件夹。

get-childitem -path "C:\Folder\Folder" -include *.mp3 -file -recurse | foreach {
    try
    {
        $newFileName = $_.name.split('_')[4..6] -join ('_')
        rename-item -path "$($_.Directory)\$($_.name)" -newName "$($_.Directory)\$($newFileName)"
    } 
    catch
    {
        write-error "Unable to rename ($_.FullName)"
    }
}

答案 1 :(得分:0)

要重命名当前文件夹(*.mp3)中的所有.个文件:

Get-ChildItem . -Filter *.mp3 |
  Rename-Item -NewName { $_.Name -replace '.*_(\d{2}_.*)', '$1' }

添加-Recurse以递归方式处理所有文件,即在目标文件夹的子树中。

-replace '.*_(\d{2}_.*)', '$1'将每个输入文件名转换为仅以歌曲索引开头的部分(即删除band-name和album-name部分);这种基于正则表达式的方法非常灵活,可以在歌曲索引之前和之后处理可变数量的标记。

请注意,名称与正则表达式不匹配的任何文件都保持不变。