I just published the post where I introduced the great and useful tool Bulk Rename Utility.
I first wanted to include the content of this post into that one as well, but then decided to make it a separate post instead. The introductory post of BRU was already getting long enough, especially because I included suggestions and comments to the tool itself, which I originally intended to post at the tool authors support forums. But I wasn’t able to do that yet, so the post got pretty long and adding something else would just have been too much.
I had a bunch of MP3 files dumped into a folder, several hundred of them. Songs by various artists. They came from some of my old MP3 CD-ROMs that I burned, when I didn’t have that many CDs (compared to today) and keeping things organized wasn’t much of a concern for me.
Well, the amount of CDs grew significantly over the years, so sorting and grouping stuff became necessary to be able to find stuff. Also, the number of different music styles that I learned to enjoy increased. Mixing some of those styles is probably not such a great idea.
The Task at Hand
Anyhow, the file names followed at least some logic. They usually started with the name of the artist followed by the title of the song, separated by a hyphen or dash (-) character. Some also included the album name or release year after the song title, in parentheses or without, spaces between names and the dash separator or without, using underscores “_” instead of spaces or spaces etc.??
There were usually more than one songs per artists, sometimes only 2 or 3 (singles) and sometimes entire albums. I wanted to create folders for each artist and move each MP3 file into the corresponding directory; a problem that I could not solve with the Bulk Rename Utility yet (even though it has the option to extract ID3 meta data from MP3s and then do something with it, which I have not figured out yet).
I did not want to do it by hand, because I still have some old CDs with MP3 files flying around where I would have to repeat this task again. So I ended up writing a little DOS BATCH Script to do the work for me.
MP3 Cleanup/Sorting Batch Script
The code for this script can be found below. You can also download the code via the link below. The ZIP archive contains next to the .BAT script file also a neat little intro to promote my web site RoySAC.com hehe.
RoySAC-SortMP3FileBatchScript.zip
The batch script performs the following set of tasks:
- look for MP3 files in the current directory and process each one of them
- look for “-” in the file name (assumed to be the separator between artist name and song title)
- parse the file name and extract the string before the first “-“, also trim trailing spaces
- checks if directory with that name exists
- If not, create the directory (with the artist name)
- move the current file into that directory
The source code of MP3FileSort2Dirs.bat
1: @echo off
2: :: -------------------------------------------------------
3: :: MP3 Cleanup/Sorting Batch Script
4: :: -------------------------------------------------------
5: :: 1. looks for MP3 files in current directory
6: :: 2. looks for "-" in file name (assumed to be
7: :: the separator between Artist Name and Song Title)
8: :: 3. parses string before first "-", trims trailing spaces
9: :: 4. checks if directory with that name exists
10: :: 4.1 If not, it creates it (artist name)
11: :: 5. moves file into the directory
12: ::
13: :: Batch Script by Carsten Cumbrowski aka Roy/SAC
14: :: visit http://www.roysac.com
15: ??
16: setlocal enabledelayedexpansion
17: cls
18: ::only list files with extension MP3, exclude directories
19: for /f "tokens=*" %%A in ('DIR /A-D /ON /B "*.MP3"^|SORT /REVERSE') do (
20: call :PERFACTION "%%~A%"
21: )
22: echo.
23: echo Done!
24: echo.
25: pause
26: goto :EOF
27: ??
28: :PERFACTION
29: ::look for dash in file name, parse str before dash
30: for /F "tokens=1 delims=-" %%B in ("%~1") do (
31: ::trim trailing spaces from parsed string
32: set str=%%~B%
33: for /l %%a in (1,1,31) do if "!str:~-1!"==" " set str=!str:~0,-1!
34: )
35: call :PROCFILE "%str%"
36: goto :EOF
37: ??
38: :PROCFILE
39: ::check of directory exists and move file
40: set f2="%~1"
41: if {%~x1}=={} (
42: echo %f2%
43: if NOT exist %f2% MD %f2%
44: move "%~1*.MP3" %f2%
45: )
46: goto :EOF
47: ??
I hope you found this post and script useful. Let me know via the comments section of this blog post below.
Thanks and Cheers!
Carsten aka Roy/SAC
Hi Roy!
Just thought I’d drop a little note letting you know I haven’t used your scripts *yet* but I have been bookmarking some of your posts. I do a bit of data sorting too, and am excited to try these out when the time comes. Keep it up!
– sP!cRO ex-SAC/ACiD/RMRS/etc 😉
i have a folder with 40000 mp3 your script work great for the last 1000 the rest it won’t work. any idea ? thanks.
Mhh.. Do you have files that use non-basic ASCII characters or special characters like “!”? I don’t think that the number of files is an issue, many files just increase the time it takes for the script to complete.