[Solved] Cut and paste (feat. artists) from %title% to %artists%

Hello everyone,

I recently decided to optimize my use of MP3Tag but I'm faced to a problem, some of my files contain featured artists under this format on the Title field : "%title% (feat. %featured artist 1% & %featured artist 2%) (Original Mix)".

I would like to add those artists in the artists field, without deleting those already there, and then delete them from the title field.

Actually the "solution" I've found is to copy them manually and then use a "replace with regular expressions" to delete them from the title field with this : " (feat. \w+)" but it works only for a single name.

For more clarity, here is an example :

Original Filename : Feint - Outbreak (feat. Mylk) (Original Mix)
Original Title : Outbreak (feat. Mylk) (Original Mix)
Original Artists : Feint

Final Filename : Outbreak (Original Mix)
Final Title : Outbreak (Original Mix)
Final Artists : Feint/Mylk

In this example there is only one featured artist with a single name, but I'm looking for a solution which can work on every case, even with 2 or 3 featured artists and with or without something being (Original Mix, Remix...).

Thank's in advance for your tips/leads !

This task can be solved by applying several steps, using temporary helper tag-fields.
The different steps can be stored as a group of actions.
This way all saved steps can be called by the name of the actiongroup.

What you have ...

_FILENAME = Friend - Outbreak (feat. Mylk & Coffee) (Original Mix)
TITLE = Outbreak (feat. Mylk & Coffee) (Original Mix)
ARTIST = Friend

What you want to create new ...

TEMP_ARTIST <== %ARTIST%
... stores 'Friend'

TEMP_TITLE <== $regexp(%TITLE%,'^(.+?)\s*((feat.?.?)).$','$1')
... stores 'Outbreak'

TEMP_MIX <== $ifgreater($strstr(%TITLE%,'(Original Mix)'),0,'(Original Mix)',)
... stores '(Original Mix)' or nothing

TEMP_FEAT <== $if($eql(%TITLE%,$regexp(%TITLE%,'^.((feat.?.?)).$','$1')),,$regexp(%TITLE%,'^.(feat.?\s*(.?)).$','$1'))
... stores 'Mylk & Coffee' or nothing

TEMP_FEAT <== $if(%TEMP_FEAT%,$regexp(%TEMP_FEAT%,'\s*&\s*',','),)
... replaces space-ampersand-space by comma

NEW_FILENAME <== %TEMP_TITLE%[' '%TEMP_MIX%]

NEW_TITLE <== %TEMP_TITLE%[' '%TEMP_MIX%]

NEW_ARTIST <== %ARTIST%[','%TEMP_FEAT%]

While prooving this concept, at this point, ...
check all temporary tagfields, and if ok, ...
then save the content from temporary field to original tag field ...
ARTIST <== %NEW_ARTIST%
TITLE <== %NEW_TITLE%
_FILENAME <== %NEW_FILENAME%

As the last step remove all temporary helper tagfields ...
NEW_ARTIST <== $char(0)
NEW_TITLE <== $char(0)
NEW_FILENAME <== $char(0)

The symbol '<==' stands for applying the action "Format value".

Good luck!

DD.20170804.1710.CEST

Thank you so much for the huge help !
It pushes me to understand the big idea of each part, even if I'm not able to fully understand them.

Using all those things in my MP3Tag, I discover that I wasn't clear about this part, even in my head :

It works exactly how expected, but in some cases, it's not (Original Mix), it can be (xxx Remix) or (xxx bootleg) or whatever. And even it can be something like this : Outbreak (feat. Mylk) (part 2) (Coffee Remix). And the expected result is : Outbreak (part 2) (Coffee Remix).

So the thing to do is more like this :

but with the part after the (feat. Mylk), and it's here that I might need a little bit more help because I don't see exactly how to adapt this.

And an other question : the columns "New Artist" and "New Title" allow me to check if everything is fine before replacing the real field, but the $char(0) is only for an "esthetic" purpose or is there something else ?

EDIT : I feel stupid, but for the first part I think I've found a simple solution :
Temp_Title <== $regexp(%title%,(feat.?\s*(.*?)),)