First of all, I'm assuming the
( just before the
$eq(%albumartist%,Various Artists) is miscopied -- I'd think Picard would be giving a rather obvious error if it's in the actual script. Second, whitespace and line breaks are tricky in Picard's script entry boxes, but the file naming one seems a bit more forgiving, and we can make that block of clearer by taking advantage of that:
$if(%album%,%album%,Songs)/%artist% - %title%,
$if(%album%,%album%,No Album)/%artist% - $if(%album%,%album% - ,)%title%
I'm not immediately seeing anything that would put featured artists in that level of the hierarchy, so mind giving us an example of a song that's doing that? And just to be sure, you are using the scan/lookup functions to match the tracks to ones on the database, right? Picard won't fix a malformed album artist field if it doesn't know what to fix it to.
One last note on your script while I'm here: you may want to look at the
$if2(...) function, which uses the first non-empty argument. Your
$if(%album%,%album%,Songs or No Album) calls do the same thing, and if you find that clearer to read then feel free to leave them as they are, but if you ever wanted to expand beyond two potential values,
$if2(%album%,%_othervariable%,No Album) very quickly becomes much more compact.