批处理文件可对文件夹中的多个文件名进行重命名,且符合 Windows 7 的标准

批处理文件可对文件夹中的多个文件名进行重命名,且符合 Windows 7 的标准

我使用 Windows 7 64 位,我有一个文件列表,文件名称由以下部分组成

作者 - 专辑名称 - 歌曲名称

我需要所有文件的名称成为

作者 - 歌曲名称 - 专辑名称

文件扩展名(.mp3、.mp4、.mpeg)不应更改,应保留原始扩展名

My old file name:
author - album name - name of the song
Céline Dion - Loved Me Back to Life - Save Your Soul
Céline Dion - Loved Me Back to Life - Unfinished Songs
Michael Jackson - Bad - Dirty Diana
Michael Jackson - Thriller - Baby Be Mine


My new file name
author - name of the song - album name
Céline Dion - Save Your Soul - Loved Me Back to Life
Céline Dion - Unfinished Songs - Loved Me Back to Life
Michael Jackson - Dirty Diana - Bad
Michael Jackson - Baby Be Mine - Thriller

答案1

PowerShell 是替代批处理文件的绝佳选择。我不保证此脚本的效果——请务必备份您的文件夹,因为名称将自动重新排列。此外,它不会进行任何错误处理——如果文件命名错误或不遵循您描述的命名约定,它将不完美。

Set-Location C:\pathHere\

Get-ChildItem | ForEach-Object {
    $artist,$album,$song = $_.BaseName.Split(" - ")
    Rename-Item $_ -NewName ($artist + " - " + $song + " - "  + $album + $_.Extension)
}

答案2

如果需要批量处理,但批处理文件不是绝对必要的,则可以想到两个 GUI 驱动的实用程序:

  1. 媒体猴可以安装或以便携模式运行,无需安装。它旨在对媒体库进行持久管理,还将设置 ID3 标签,但只能使用一次。

    • 如果文件已经标记,MediaMonkey 将自动推断艺术家、专辑和曲目
      • 如果文件没有标记,则从文件名自动标记(Alt+Q),使用以下格式:<Artist> - <Album> - <Title>
    • 使用移动和重命名选项,根据以下格式从标签(Ctrl+R)重命名文件:<Artist> - <Title> - <Album>
  2. 变形记2必须安装,但可以使用一些正则表达式和交换重命名器进行所需的更改。

    • 将此与以下文本进行交换:
      • [^\W\d]-[^\W\d]+-以及以下文字:-[^\W\d]
    • 在这段文字中间:
      • [^\W\d]-以及以下文字:-[^\W\d]
    • 确保两者都已勾选“作为正则表达式进行评估”。

任何一个应用程序都可以在应用更改之前预览更改。

答案3

也许可以尝试这个 PowerShell 脚本,最好使用 PowerShell 7 运行它,你可以在 GitHub 上下载它。(否则它可能无法正常工作。)

$path=$args[0]
$extension=$args[1]
Get-ChildItem -Path $path -Force -Recurse -Include $extension -File | Foreach-Object {
    $name=$_.BaseName.Split(" - ")
    if ($name.Count -eq 3) {
        Rename-Item -Path $_.FullName -NewName $($name[0]+" - "+$name[2]+" - "+$name[1]+$_.Extension)
    }
}

将其保存为 rensong.ps1,然后先通过 cd 到其位置运行它,然后像这样运行它:

.\rensong.ps1 "C:\Path\to\Folder" "*.ext1,*.ext2,*.ext3"

例如:

.\rensong.ps1 "C:\Users\Estranger\Music" "*.mp3,*.mp4,*.mpeg"

您可以使用三个以上的扩展,只需遵循格式即可。

答案4

在尝试了更多不起作用的 Powershell 脚本后,我找到了一个使用简单批处理文件的解决方案

Powershell 代码似乎不起作用。

@Echo Off&SetLocal EnableExtensions DisableDelayedExpansion
For %%G In ("* - * - *.*")Do (Set "BaseNameBefore=%%~nG"
    SetLocal EnableDelayedExpansion&For /F "Tokens=1-4 Delims=?" %%I In (
        "!BaseNameBefore: - =?!")Do EndLocal&If "%%L" == "" If Not %%K == "" (
        Ren "%%G" "%%I - %%K - %%J%%~xG"))

相关内容