用于重命名文件的Windows批处理脚本

时间:2015-01-31 03:45:37

标签: regex windows batch-file

我在一个文件夹中有大约1000首歌曲。每个文件的命名约定是艺术家 - 曲目title.mp3',即Journey - Don不要停止Believing.mp3。我需要将文件夹中的所有文件都反转为“不要停止相信 - Journey.mp3'。

我确信可以使用Windows批处理脚本和正则表达式完成。但是我对Windows批处理的了解还不够。

我知道脚本需要执行以下操作: 1.从文件名的开头开始,选择除连字符后跟空格的所有字符 2.剪掉那些角色 3.转到文件名的末尾,然后返回四个字符 4.输入空格连字符空格,然后粘贴剪切的字符串 5.对文件夹

中的所有文件循环此过程

有人有建议吗? 谢谢

4 个答案:

答案 0 :(得分:1)

我会使用MP3Tag(http://www.mp3tag.de/en/index.html)。该程序可以在很短的时间内为您完成此任务:)

答案 1 :(得分:0)

就个人而言,我将这些文件保留为目前的名称。但是,以下脚本应该可以正常工作。

注意它假定以下有关输入文件名

  • 只有一个连字符
  • 连字符前后有一个空格

脚本:

@echo off
setlocal enabledelayedexpansion

for /F "usebackq tokens=1,* delims=-" %%a in (`dir /b *.mp3`) do (
    set artistName=%%a
    set artistName=!artistName:~0,-1!

    for /F "usebackq tokens=1,* delims=." %%x in ('%%b') do (
        set songTitle=%%x
        set songTitle=!songTitle:~1!

        set fileExt=%%y
    )

    rename "%%a-%%b" "!songTitle! - !artistName!.!fileExt!"
)

答案 2 :(得分:0)

只是一个建议:不要重命名文件。而是使用新名称为另一个文件夹中的文件创建附加链接。这样,原始文件夹将保留按艺术家排序的文件,而新文件夹将按标题顺序存储它们!创建其他链接后,您需要删除两个文件夹中的文件 ,以便从磁盘中物理删除该文件。 Google for" fsutil hardlink"有关更多信息和/或在命令提示符下键入fsutil hardlink /?

下面的批处理文件使用" songsByTitle"中的新名称创建其他链接。夹;根据需要调整名称。该程序假设整个文件名只包含一个连字符和一个点。

@echo off
setlocal EnableDelayedExpansion

for /F "tokens=1-3 delims=-." %%a in ('dir /B /A-D *.mp3') do (
   set "artist=%%a"
   set "title=%%b"
   fsutil hardlink create "songsByTitle\!title:~1! - !artist:~0,-1!.%%c!" "%%a-%%b.%%c"
)

答案 3 :(得分:0)

您可以在命令提示符上使用它:

for /f "tokens=1*delims=-" %a in ('dir /b/a-d *.mp3') do @for /f "tokens=*" %c in ("%~nb") do @set ".%~a=%~a"&for /f "delims=" %d in ('call echo "%.%~a:~0,-1%"') do @echo ren "%~a-%~b" "%~c - %~d%~xb"&set ".%~a="

删除最后一个echo以使其正常工作。