Yes you can do basically this, but you may have to adjust what Ive done a little to get exactly what you want.
In Jaikoz the existing path of a file is split into:
Base Folder
Sub Folder
Filename
these are all displayable columns in the main edit table.
In Jaikoz the mask is split between folders and filename, and between standard and compilation albums. Only the sub folder portion is modified the base folder part of a filename is left untouched so in the following masks it is assumed the base folder of all your files is set to \MUSIC. If it is not you can adjust already loaded files using Action:File and Folder Correct:Shift SubFolder to BaseFolder or modify how a file path is split between BaseFolder and SubFolder before loading using Preferences:General:Base Folder
The only problematic part is the special processing for Singles, we can say do special processing if the Release Type = ‘Single’ but we can’t say do special processing if the song is in the SINGLES folder because the basefolder, subfolder and filename fields are not accessible in rename masks. It depends if you want this special processing only for one song singles or if you want to do this when you have both/all songs of a single. However if you only want singles processing for a particular folder you get round this by manually changing the folder and compilation folder masks when processing the SINGLES folder only.
Folder Mask
function removeThe(value)
{
value=value.replace('the','')
return value.replace('The','')
}
function ifnotempty(value,sep){
return value.length > 0 ? value + sep : '';
}
function ifnotempty2(value1,value2,sep){
return value1.length > 0 ? value1 + sep :value2.length > 0 ? value2 + sep:'' ;
}
ifnotempty2(removeThe(albumartist),removeThe(artist),folderseparator) + (year.length>0 ?'[' + year + ']':'') + ifnotempty(removeThe(album),folderseparator) + (disctotal > 1 ? discno: + folderseparator,'') +trackno
Filename Mask
function removeThe(value)
{
value=value.replace('the','')
return value.replace('The','')
}
function pad(number, length) {
var str = '' + number;
while (str.length < length) {
str = '0' + str;
}
return str;
}
function ifnotempty(value,sep){
return value.length > 0 ? value + sep : '';
}
function ifnotempty2(value1,value2,sep){
return value1.length > 0 ? value1 + sep :value2.length > 0 ? value2 + sep:'' ;
}
ifnotempty(pad(trackno,2),' - ') + removeThe(title)
Compilation Folder Mask
function removeThe(value)
{
value=value.replace('the','')
return value.replace('The','')
}
function ifnotempty(value,sep){
return value.length > 0 ? value + sep : '';
}
function ifnotempty2(value1,value2,sep){
return value1.length > 0 ? value1 + sep :value2.length > 0 ? value2 + sep:'' ;
}
'VA' + folderseparator + +ifnotempty2(removeThe(albumartist),removeThe(artist),'/') + ifnotempty(removeThe(album),'/') + (disctotal>1 ? discno + '/' : '')
Compilation Filename Mask
function removeThe(value)
{
return value.toLowerCase().replace('the','')
}
function pad(number, length) {
var str = '' + number;
while (str.length < length) {
str = '0' + str;
}
return str;
}
function ifnotempty(value,sep){
return value.length > 0 ? value + sep : '';
}
function ifnotempty2(value1,value2,sep){
return value1.length > 0 ? value1 + sep :value2.length > 0 ? value2 + sep:'' ;
}
ifnotempty(pad(discno,2),' - ') + ifnotempty(pad(trackno,2),' - ') + ifnotempty(removeThe(title),' - ') + ifnotempty(removeThe(artist),' ')
To replace accented characters ectera enable Preferences:File and Folder Correct:File and Folder Naming:Replace non-Ascii Characters