我在一个文件夹中有大约1000首歌曲。每个文件的命名约定是艺术家 - 曲目title.mp3',即Journey - Don不要停止Believing.mp3。我需要将文件夹中的所有文件都反转为“不要停止相信 - Journey.mp3'。
我确信可以使用Windows批处理脚本和正则表达式完成。但是我对Windows批处理的了解还不够。
我知道脚本需要执行以下操作: 1.从文件名的开头开始,选择除连字符后跟空格的所有字符 2.剪掉那些角色 3.转到文件名的末尾,然后返回四个字符 4.输入空格连字符空格,然后粘贴剪切的字符串 5.对文件夹
中的所有文件循环此过程有人有建议吗? 谢谢
答案 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
以使其正常工作。