Introduction
If you've ever had a directory full of files, all containing a certain string, and you wanted to replace/remove it, this is the script for you.
Background
My CD ripping software always leaves a folder full of files with the following name format CDName_Track_#_SongName.mp3. Since the folder name already carries the name of the CD and I know that every song is a track - I'd like to get rid of the prefix. It takes a minute for a CD with 5 tracks, 3 minutes for an average CD (15 tracks), and more if you rip several CDs... I decided to solve this creatively: a script that iterates through all files in a folder and replaces a string with another. Took 5 minutes to write - so I guess I'm ahead.
Using the code
Just copy the following code into a text file, rename it to have a ".js" extension (or just download the attached file) and set the following 3 parameters:
sFolderName = "D:\\Temp\\Mp3";
sStringToFind = "_Track_";
sStringToReplace = "";
Make sure you include double-\ in the folder name (C-type strings, in .NET I would have used a @).
If you just want to get rid of a string, make the third parameter an empty string.
Save the change file and double-click. In any Windows OS (beginning with Window 98 SE), the Windows Scripting Host (WSH), would execute the file.
Here's the entire code, it's pretty self explanatory:
var sFolderName, sStringToFind;
var nResult;
sFolderName = "D:\\Temp\\Mp3";
sStringToFind = "_Track_";
sStringToReplace = "";
nResult = renameFiles(sFolderName, sStringToFind, sStringToReplace);
WScript.Echo(nResult + " files renamed");
function renameFiles(sFolder, sString1, sString2)
{
var oFSO, oFile, oFolder;
var re, index;
var sName;
var i = 0, n;
oFSO = new ActiveXObject("Scripting.FileSystemObject");
oFolder = oFSO.GetFolder(sFolder);
try
{
index = new Enumerator(oFolder.Files);
for (; !index.atEnd(); index.moveNext())
{
oFile = index.item();
sName = oFile.Name;
n = sName.indexOf(sString1);
if(n != -1)
{
try
{
sName = sName.substring(0, n) + sString2 +
sName.substr(n + sString1.length);
oFile.Name = sName;
i++;
}
catch(e)
{
WScript.Echo("Can not rename file " + sName +
" because\n" + e.description);
}
}
}
}
catch(e)
{
WScript.Echo("Could not access folder " + sFolder +
" because\n" + e.description);
return 0;
}
finally
{
oFSO = null;
re = null;
return i;
}
}
Points of Interest
One warning: Antivirus software hates script files. McAfee warns about them as if they were the plague. Norton goes one step further and alters the registry so .js and .vbs files cannot be run. Be aware of it and rest assured - this is not a virus!
History
Things I may end up adding (if anyone is interested):
- Regular expression, instead of a set string.
- Recursing through a folder tree.