Testing mp3tag behaviour


#1

Hello there, I have been experimenting with code and changing case of various tags. Firstly, let me apologise for bringing up very similar code to some of my other posts, this has been modified.

Based on previous contributions from you all, I was made aware that there are problems with changing the case of filenames and directories due to the way that Windows functions as an operating system. I am told that in order to make actions work, I should ideally have two actions. One to deal with filenames and one to deal with directories and other tags/or the other way around. However, this is now ideal.

I have a script which I use at the moment as my all in one which seems to deal with all tags and case correctly but cannot reproduce this in new actions.

A work around is to add characters to the filenames and then remove them to force the changes.

During my tests, I have forced lowercase and then ran a new action to change the case of filename, directory, title, album, albumartist, artist and artists. Sometimes, running the action it alters all the tags and directory case when executed but does not affect the filenames (despite adding and removing characters), but other times it does. Then, running it a second time if it fails to do everything the first time makes it work completely.

Does anyone understand why this is? It would seem despite adding characters and removing them that mp3tag does not like to update case on filenames, despite the filename referring to the tags which have had their case altered successfully first.

It also looks like mp3tag copes better with references to _TAG than listing specific tags.

[#0]
T=2
F=_FILENAME
1=%_FILENAME%
2=%_FILENAME% \u2b14123\u2b15
3=0|0

[#1]
T=1
F=_FILENAME
1=4
2=

[#2]
T=9
! Remove Source=
F=SOURCE

[#3]
T=9
! Remove SourceID=
F=SOURCEID

[#4]
T=7
F=$replace(%album% \u003d\u003d\u003d %artist% \u003d\u003d\u003d %title%,'[','(',']',')')
1=%album% \u003d\u003d\u003d %artist% \u003d\u003d\u003d %title%

[#5]
T=5
! Replace square brackets with round=
F=_DIRECTORY
1=$replace(A:\\Music\\Record\\%artist%\\%album%,'[','(',']',')')

[#6]
T=5
! Replace square brackets with round=
F=_FILENAME
1=$replace(%TRACK% %TITLE%,'[','(',']',')')

[#7]
T=2
! Remove Album=
F=ALBUM
1= (Album)
2=
3=0

[#8]
T=2
! Remove Album=
F=_DIRECTORY
1= (Album)
2=
3=0

[#9]
T=2
! Remove Album=
F=_FILENAME
1= (Album)
2=
3=0

[#10]
T=2
! Remove Digital Album=
F=ALBUM
1= (Digital Album)
2=
3=0

[#11]
T=2
! Remove Digital Album=
F=_DIRECTORY
1= (Digital Album)
2=
3=0

[#12]
T=2
! Remove Digital Album=
F=_FILENAME
1= (Digital Album)
2=
3=0

[#13]
T=2
! Remove EP=
F=ALBUM
1= (EP)
2=
3=0

[#14]
T=2
! Remove EP=
F=_DIRECTORY
1= (EP)
2=
3=0

[#15]
T=2
! Remove EP=
F=_FILENAME
1= (EP)
2=
3=0

[#16]
T=2
! Remove LP=
F=ALBUM
1= (LP)
2=
3=0

[#17]
T=2
! Remove LP=
F=_DIRECTORY
1= (LP)
2=
3=0

[#18]
T=2
! Remove LP=
F=_FILENAME
1= (LP)
2=
3=0

[#19]
T=2
! Remove Single=
F=ALBUM
1= (Single)
2=
3=0

[#20]
T=2
! Remove Single=
F=_DIRECTORY
1= (Single)
2=
3=0

[#21]
T=2
! Remove Single=
F=_FILENAME
1= (Single)
2=
3=0

[#22]
T=4
F=DISCNUMBER
1=^(\\d+)/\\d+
2=$1
3=0

[#23]
T=5
F=TRACK
1=[$num(%track%,1)]

[#24]
T=4
F=_TAG
1=\\\\b(A|An|The|And|But|Or|So|After|Before|Out|When|While|Since|Until|Although|Even If|Because|About|Above|Across|Against|Along|Alongside|As|At|Below|By|During|For|From|In|Into|Of|Off|On|Onto|Over|Than|Through|Till|To|Under|Up|With|Within|Without)\\\\b
2=$lower($1)
3=0

[#25]
T=4
F=_TAG
1=^\\\\s*(\\\\w+)
2=$caps($1)
3=0

[#26]
T=4
F=_TAG
1=(\\\\w+)\\\\s*$
2=$caps($1)
3=0

[#27]
T=4
F=_DIRECTORY
1=\\\\b(A|An|The|And|But|Or|So|After|Before|Out|When|While|Since|Until|Although|Even If|Because|About|Above|Across|Against|Along|Alongside|As|At|Below|By|During|For|From|In|Into|Of|Off|On|Onto|Over|Than|Through|Till|To|Under|Up|With|Within|Without)\\\\b
2=$lower($1)
3=0

[#28]
T=4
F=_DIRECTORY
1=^\\\\s*(\\\\w+)
2=$caps($1)
3=0

[#29]
T=4
F=_DIRECTORY
1=(\\\\w+)\\\\s*$
2=$caps($1)
3=0

[#30]
T=4
! Trim Trailing, Preceding & Extra Spaces [1]=
F=_DIRECTORY
1=(\\s+$|^\\s+)
2=
3=0

[#31]
T=4
! Trim Trailing, Preceding & Extra Spaces [2]=
F=_DIRECTORY
1=\\s+
2= 
3=0

[#32]
T=4
! Enforce Correct Word Spacing [1]=
F=_DIRECTORY
1=([^\\s\\.;\\)\\]/])([&\\({\\[\\+])
2=$1 $2
3=0

[#33]
T=4
! Enforce Correct Word Spacing [2]=
F=_DIRECTORY
1=(&|\\)|\\}|\\]|;|(?<!\\d),|,(?!\\d{3})|\\+)([^\\s\\.;\\(\\[/])
2=$1 $2
3=0

[#34]
T=4
! Enforce Correct Word Spacing [3]=
F=_DIRECTORY
1=\\b([a-z])\\s(&)\\s([a-z])\\b
2=$1$2$3
3=0

[#35]
T=4
! Enforce Correct Word Spacing [4]=
F=_DIRECTORY
1=([\\(\\[])\\s
2=$1
3=0

[#36]
T=4
! Enforce Correct Word Spacing [5]=
F=_DIRECTORY
1=\\s(\\]|\\)|\\?|:|;|,|\\.(?!\\.\\.))
2=$1
3=0

[#37]
T=4
! Enforce Correct Word Spacing [6]=
F=_DIRECTORY
1=(".*?")([^\\s\\]\\)/\\}!\\-\u003d,.;])(?!$)
2=$1 $2
3=0

[#38]
T=4
! Enforce Correct Word Spacing [7]=
F=_DIRECTORY
1=([^\\s\\[\\(/\\{])(".*?")
2=$1 $2
3=0

[#39]
T=4
! Enforce Correct Word Spacing [8]=
F=_DIRECTORY
1=(\\.(?<!\\.\\.))(?![\\s\\.':;\\)\\]"])(?![\\l\\u](\\.|$| ))(?!$)(?!\\d)(?!(co|com|uk|net|org|gov|edu|mil|html?|php))
2=$0 
3=0

[#40]
T=4
! Enforce Correct Word Spacing [9]=
F=_DIRECTORY
1=ww.\\s
2=ww.
3=0

[#41]
T=4
! Enforce Correct Word Spacing [10]=
F=_DIRECTORY
1="\\s?(.*?)\\s?"
2="$1"
3=0

[#42]
T=4
! Add Apostrophe to "Are" Contractions=
F=_DIRECTORY
1=\\b(how|they|what|when|why|you)re\\b
2=$1're
3=0

[#43]
T=4
! Add Apostrophe to "Have" Contractions=
F=_DIRECTORY
1=\\b(could|how|i|might|must|should|we|what|where|would|you)ve\\b
2=$1've
3=0

[#44]
T=4
! Add Apostrophe to "Is" Contractions=
F=_DIRECTORY
1=\\b(he|here|how|she|that|there|two|what|when|where|who|why)s\\b
2=$1's
3=0

[#45]
T=4
! Add Apostrophe to "Not" Contractions=
F=_DIRECTORY
1=\\b(ain|aren|can|couldn|didn|doesn|don|hadn|hasn|haven|isn|mightn|mustn|shouldn|wasn|weren|won|wouldn)t\\b
2=$1't
3=0

[#46]
T=4
! Add Apostrophe to "Will" Contractions=
F=_DIRECTORY
1=\\b(how|it|that|there|they|what|when|where|who|you)ll\\b
2=$1'll
3=0

[#47]
T=4
! Title Case Conversion [1] (Convert Words to Mixed-Case, Ignoring Upper-Case Letters)=
F=_DIRECTORY
1=([-({\\[\\]}) _",.+&@;*])(\\l)
2=$1$upper($2)
3=1

[#48]
T=4
! Title Case Conversion [2] (Capitalise First Word)=
F=_DIRECTORY
1=^(\\l)
2=$upper($1)
3=1

[#49]
T=4
! Title Case Conversion [3] (Articles, Conjunctions & Short Prepositions to Lower-Case, Except Before or After Punctuation)=
F=_DIRECTORY
1=(?<!&|:|;|-|/|!|(?<![A-Z]\\.[A-Z])\\.|\\?|\\+)(\\s+\\b(A|An|And|As|At|But|By|De|Et|For|From|In|Into|Le|Nor|Of|Off|On|Onto|Or|So|Than|The|To|Upon|Von|With)(?\u003d\\s)(?!\\s[\\-\\(\\)\\[\\]{}]))
2=$lower($1)
3=1

[#50]
T=4
! Title Case Conversion [4]=
F=_DIRECTORY
1=(^|\\s|\\(|\\[|/)'(.{1})
2=$1'$upper($2)
3=0

[#51]
T=4
! Title Case Conversion [5] (Capitalise "to" Before Common Verbs)=
F=_DIRECTORY
1=(to\\s+)\\b(Ask|Be|Begin|Believe|Bring|Buy|Call|Care|Change|Cheat|Come|Cry|Dance|Die|Do|Dream|Fall|Feel|Find|Forget|Get|Give|Go|Hate|Have|Hear|Hide|Hold|Keep|Know|Laugh|Learn|Leave|Let|Lie|Listen|Live|Look|Lose|Love|Make|Mean|Miss|Move|Marry|Need|Play|Pretend|Promise|Put|Remember|Return|Ride|Run|Say|See|Sell|Send|Set|Show|Sing|Speak|Stand|Stay|Steal|Stop|Take|Talk|Tell|Thank|Think|Touch|Travel|Try|Use|Wait|Walk|Want|Win|Wish|Work|Write)\\b
2=$caps($1)$2
3=1

[#52]
T=4
! Forced Upper-Case for Named Abbreviations and Acronyms=
F=_DIRECTORY
1=\\b(ac|aka|aol|ap|asap|atm|bbc|bc|bce|blt|btw|cbs|cc|cd|cia|dc|dj|doa|emi|ep|faq|fbi|fm|fr|gb|gi|imho|ira|irs|jc|kkk|lp|mc|mgm|mtv||nasa|nbc|npr|ny|nyc|ok|ost|pm|ps|qed|rca|rpm|sos|tba|tlc|tv|ufo|uk|usa|ussr|va|ymca)\\b
2=$upper($1)
3=0

[#53]
T=4
! CamelCase Irish Names Beginning with O'=
F=_DIRECTORY
1=\\b(O'[a-z]|O\\x{2019}[a-z])
2=$upper($1)
3=1

[#54]
T=4
! CamelCase Scottish Names Beginning with Mc=
F=_DIRECTORY
1=\\b(Mc)((?:[a-z]|-){3,})
2=$1$caps2($2,-)
3=1

[#55]
T=4
! CamelCase Common Scottish Names Beginning with Mac=
F=_DIRECTORY
1=\\b(Mac)(Alister|Arthur|Askill|Bain|Coll|Donald|Dougall|Dowell|Duff|Ewen|Farlane|Gregor|Intyre|Kenzie|Kinnon|Laren|Lean|Leod|Millan|Nab|Neil|Pherson|Rae)\\b
2=$1$caps2($2)
3=0

[#56]
T=4
! Roman Numerals to Upper-Case (Up to LXXIX, or 89)=
F=_DIRECTORY
1=\\b(?:L?X{0,3}|XL)(?:V?I{0,3}|I[VX])(?\u003d(\\.\\s|\\s|\\)|$))
2=$upper($0)
3=0

[#57]
T=4
! Common Latinisms and Miscellany to Lowercase=
F=_DIRECTORY
1=(\\b(?:E\\.G|et\\sAl|Etc|I\\.E|Versus|Vs|Feat\\.\\s|Ft\\.\\s|(?<\u003d')N(?\u003d'))\\b)
2=$lower($1)
3=1

[#58]
T=4
! Trim Trailing, Preceding & Extra Spaces [1]=
F=_TAG
1=(\\s+$|^\\s+)
2=
3=0

[#59]
T=4
! Trim Trailing, Preceding & Extra Spaces [2]=
F=_TAG
1=\\s+
2= 
3=0

[#60]
T=4
! Enforce Correct Word Spacing [1]=
F=_TAG
1=([^\\s\\.:;\\)\\]/])([&\\({\\[\\+])
2=$1 $2
3=0

[#61]
T=4
! Enforce Correct Word Spacing [2]=
F=_TAG
1=(&|\\)|\\}|\\]|;|(?<!\\d),|,(?!\\d{3})|\\+)([^\\s\\.:;\\(\\[/])
2=$1 $2
3=0

[#62]
T=4
! Enforce Correct Word Spacing [3]=
F=_TAG
1=\\b([a-z])\\s(&)\\s([a-z])\\b
2=$1$2$3
3=0

[#63]
T=4
! Enforce Correct Word Spacing [4]=
F=_TAG
1=([\\(\\[])\\s
2=$1
3=0

[#64]
T=4
! Enforce Correct Word Spacing [5]=
F=_TAG
1=\\s(\\]|\\)|\\?|:|;|,|\\.(?!\\.\\.))
2=$1
3=0

[#65]
T=4
! Enforce Correct Word Spacing [6]=
F=_TAG
1=(".*?")([^\\s\\]\\)/\\}!\\-\u003d,.;:])(?!$)
2=$1 $2
3=0

[#66]
T=4
! Enforce Correct Word Spacing [7]=
F=_TAG
1=([^\\s\\[\\(/\\{])(".*?")
2=$1 $2
3=0

[#67]
T=4
! Enforce Correct Word Spacing [8]=
F=_TAG
1=(\\.(?<!\\.\\.))(?![\\s\\.':;\\)\\]"])(?![\\l\\u](\\.|$| ))(?!$)(?!\\d)(?!(co|com|uk|net|org|gov|edu|mil|html?|php))
2=$0 
3=0

[#68]
T=4
! Enforce Correct Word Spacing [9]=
F=_TAG
1=ww.\\s
2=ww.
3=0

[#69]
T=4
! Enforce Correct Word Spacing [10]=
F=_TAG
1="\\s?(.*?)\\s?"
2="$1"
3=0

[#70]
T=4
! Add Apostrophe to "Are" Contractions=
F=_TAG
1=\\b(how|they|what|when|why|you)re\\b
2=$1're
3=0

[#71]
T=4
! Add Apostrophe to "Have" Contractions=
F=_TAG
1=\\b(could|how|i|might|must|should|we|what|where|would|you)ve\\b
2=$1've
3=0

[#72]
T=4
! Add Apostrophe to "Is" Contractions=
F=_TAG
1=\\b(he|here|how|she|that|there|two|what|when|where|who|why)s\\b
2=$1's
3=0

[#73]
T=4
! Add Apostrophe to "Not" Contractions=
F=_TAG
1=\\b(ain|aren|can|couldn|didn|doesn|don|hadn|hasn|haven|isn|mightn|mustn|shouldn|wasn|weren|won|wouldn)t\\b
2=$1't
3=0

[#74]
T=4
! Add Apostrophe to "Will" Contractions=
F=_TAG
1=\\b(how|it|that|there|they|what|when|where|who|you)ll\\b
2=$1'll
3=0

[#75]
T=4
! Title Case Conversion [1] (Convert Words to Mixed-Case, Ignoring Upper-Case Letters)=
F=_TAG
1=([-({\\[\\]}) _",./+&@:;*])(\\l)
2=$1$upper($2)
3=1

[#76]
T=4
! Title Case Conversion [2] (Capitalise First Word)=
F=_TAG
1=^(\\l)
2=$upper($1)
3=1

[#77]
T=4
! Title Case Conversion [3] (Articles, Conjunctions & Short Prepositions to Lower-Case, Except Before or After Punctuation)=
F=_TAG
1=(?<!&|:|;|-|/|!|(?<![A-Z]\\.[A-Z])\\.|\\?|\\+)(\\s+\\b(A|An|And|As|At|But|By|De|Et|For|From|In|Into|Le|Nor|Of|Off|On|Onto|Or|So|Than|The|To|Upon|Von|With)(?\u003d\\s)(?!\\s[\\-\\(\\)\\[\\]{}]))
2=$lower($1)
3=1

[#78]
T=4
! Title Case Conversion [4]=
F=_TAG
1=(^|\\s|\\(|\\[|/)'(.{1})
2=$1'$upper($2)
3=0

[#79]
T=4
! Title Case Conversion [5] (Capitalise "to" Before Common Verbs)=
F=_TAG
1=(to\\s+)\\b(Ask|Be|Begin|Believe|Bring|Buy|Call|Care|Change|Cheat|Come|Cry|Dance|Die|Do|Dream|Fall|Feel|Find|Forget|Get|Give|Go|Hate|Have|Hear|Hide|Hold|Keep|Know|Laugh|Learn|Leave|Let|Lie|Listen|Live|Look|Lose|Love|Make|Mean|Miss|Move|Marry|Need|Play|Pretend|Promise|Put|Remember|Return|Ride|Run|Say|See|Sell|Send|Set|Show|Sing|Speak|Stand|Stay|Steal|Stop|Take|Talk|Tell|Thank|Think|Touch|Travel|Try|Use|Wait|Walk|Want|Win|Wish|Work|Write)\\b
2=$caps($1)$2
3=1

[#80]
T=4
! Forced Upper-Case for Named Abbreviations and Acronyms=
F=_TAG
1=\\b(ac|aka|aol|ap|asap|atm|bbc|bc|bce|blt|btw|cbs|cc|cd|cia|dc|dj|doa|emi|ep|faq|fbi|fm|fr|gb|gi|imho|ira|irs|jc|kkk|lp|mc|mgm|mtv|nasa|nbc|npr|ny|nyc|ok|ost|pm|ps|qed|rca|rpm|sos|tba|tlc|tv|ufo|uk|usa|ussr|va|ymca)\\b
2=$upper($1)
3=0

[#81]
T=4
! Forced Upper-Case for Band Names (regex: ^ is the beginning of the field and the $ the end)=
F=ALBUMARTIST
1=^(abba|absrdst|acdc|ac dc|adda|akdong musician|bkpr|blk jks|bts|chllngr|chvrches|chll pll|dfrnt|diiv|dmc|dnce|drwn|dtcv|dwntwn|dvsn|dvsr|exo-k|grmln|haim|htrk|hxlt|inxs|jmsn|jpnsgrls|kaytranada|kda|kshmr|ladybaby|lany|lee hi|lndn drgs|lnzndrf|lvthn|mgmt|mika|mnek|mndrmnek|ms mr|mstrkrft|n sync|nsync|partynextdoor|pwr bttm|pza|rdgldgrn|rkcb|rlyr|r\u00dcf\u00dcs du sol|rvivr|ry x|sbtrkt|shxcxchcxsh|sophie|stnnng|strfkr|swmrs|tnght|tr/st|tts|tstr|walk the moon|wzrd|u2|u-kiss|unkle|wstrn|xtrmst|zayn)\\b
2=$upper($1)
3=0

[#82]
T=4
! Forced Upper-Case for Band Names (regex: ^ is the beginning of the field and the $ the end)=
F=ARTIST
1=^(abba|absrdst|acdc|ac dc|adda|akdong musician|bkpr|blk jks|bts|chllngr|chvrches|chll pll|dfrnt|diiv|dmc|dnce|drwn|dtcv|dwntwn|dvsn|dvsr|exo-k|grmln|haim|htrk|hxlt|inxs|jmsn|jpnsgrls|kaytranada|kda|kshmr|ladybaby|lany|lee hi|lndn drgs|lnzndrf|lvthn|mgmt|mika|mnek|mndrmnek|ms mr|mstrkrft|n sync|nsync|partynextdoor|pwr bttm|pza|rdgldgrn|rkcb|rlyr|r\u00dcf\u00dcs du sol|rvivr|ry x|sbtrkt|shxcxchcxsh|sophie|stnnng|strfkr|swmrs|tnght|tr/st|tts|tstr|walk the moon|wzrd|u2|u-kiss|unkle|wstrn|xtrmst|zayn)\\b
2=$upper($1)
3=0

[#83]
T=4
! Forced Upper-Case for Band Names (regex: ^ is the beginning of the field and the $ the end)=
F=ARTISTS
1=^(abba|absrdst|acdc|ac dc|adda|akdong musician|bkpr|blk jks|bts|chllngr|chvrches|chll pll|dfrnt|diiv|dmc|dnce|drwn|dtcv|dwntwn|dvsn|dvsr|exo-k|grmln|haim|htrk|hxlt|inxs|jmsn|jpnsgrls|kaytranada|kda|kshmr|ladybaby|lany|lee hi|lndn drgs|lnzndrf|lvthn|mgmt|mika|mnek|mndrmnek|ms mr|mstrkrft|n sync|nsync|partynextdoor|pwr bttm|pza|rdgldgrn|rkcb|rlyr|r\u00dcf\u00dcs du sol|rvivr|ry x|sbtrkt|shxcxchcxsh|sophie|stnnng|strfkr|swmrs|tnght|tr/st|tts|tstr|walk the moon|wzrd|u2|u-kiss|unkle|wstrn|xtrmst|zayn)\\b
2=$upper($1)
3=0

[#84]
T=4
! Forced Upper-Case for Band Names (regex: ^ is the beginning of the field and the $ the end)=
F=TITLE
1=\\b(abba|absrdst|acdc|ac dc|adda|akdong musician|bkpr|blk jks|bts|chllngr|chvrches|chll pll|dfrnt|diiv|dmc|dnce|drwn|dtcv|dwntwn|dvsn|dvsr|exo-k|grmln|haim|htrk|hxlt|inxs|jmsn|jpnsgrls|kaytranada|kda|kshmr|ladybaby|lany|lee hi|lndn drgs|lnzndrf|lvthn|mgmt|mika|mnek|mndrmnek|ms mr|mstrkrft|n sync|nsync|partynextdoor|pwr bttm|pza|rdgldgrn|rkcb|rlyr|r\u00dcf\u00dcs du sol|rvivr|ry x|sbtrkt|shxcxchcxsh|sophie|stnnng|strfkr|swmrs|tnght|tr/st|tts|tstr|walk the moon|wzrd|u2|u-kiss|unkle|wstrn|xtrmst|zayn)\\b
2=$upper($1)
3=0

[#85]
T=4
! Replay Gain Correction [1]=
F=REPLAYGAIN_TRACK_GAIN
1=(\\+|-)?\\s?(\\d*\\.\\d*)\\sDB
2=$1$2 dB
3=0

[#86]
T=4
! Replay Gain Correction [2]=
F=REPLAYGAIN_ALBUM_GAIN
1=(\\+|-)?\\s?(\\d*\\.\\d*)\\sDB
2=$1$2 dB
3=0

[#87]
T=4
! CamelCase Irish Names Beginning with O'=
F=_TAG
1=\\b(O'[a-z]|O\\x{2019}[a-z])
2=$upper($1)
3=1

[#88]
T=4
! CamelCase Scottish Names Beginning with Mc=
F=_TAG
1=\\b(Mc)((?:[a-z]|-){3,})
2=$1$caps2($2,-)
3=1

[#89]
T=4
! CamelCase Common Scottish Names Beginning with Mac=
F=_TAG
1=\\b(Mac)(Alister|Arthur|Askill|Bain|Coll|Donald|Dougall|Dowell|Duff|Ewen|Farlane|Gregor|Intyre|Kenzie|Kinnon|Laren|Lean|Leod|Millan|Nab|Neil|Pherson|Rae)\\b
2=$1$caps2($2)
3=0

[#90]
T=4
! Roman Numerals to Upper-Case (Up to LXXIX, or 89)=
F=_TAG
1=\\b(?:L?X{0,3}|XL)(?:V?I{0,3}|I[VX])(?\u003d(\\.\\s|\\s|\\)|$))
2=$upper($0)
3=0

[#91]
T=4
! Common Latinisms and Miscellany to Lowercase=
F=_TAG
1=(\\b(?:E\\.G|et\\sAl|Etc|I\\.E|Versus|Vs|Feat\\.\\s|Ft\\.\\s|(?<\u003d')N(?\u003d'))\\b)
2=$lower($1)
3=1

[#92]
T=4
F=_DIRECTORY
1=%_DIRECTORY% \u2b14123\u2b15
2=%_DIRECTORY%
3=0

[#93]
T=4
F=_FILENAME
1=\u2b14123\u2b15
2=
3=0

[#94]
T=2
F=_FILENAME
1=%_FILENAME%
2=%TITLE%%FILETYPE%
3=0|0

Thank you for your consideration and support.


#2

I can't find this in the documentation, but my experience tells me this:
_TAG is a short-cut, or you might say "pseudo-field", that represents all fields in the tag when creating actions. The filename is not part of the tag so it is not included.
_All is similar, but it includes the filename (the extension is omitted).

For Case conversion action:
If Field is _FILENAME --> only the filename will be affected, but not the extension.
If Field is _TAG --> only the tag(s) will be affected, but not the filename.
If Field is _ALL --> the tag(s) and the filename will be affected, but not the extension.

If you want to control the case of the extension, you may use a separate action.
For example, to make extensions lower case:

Action: Replace with regular expression
Field: _FILENAME
Regular expression: ([^.]*)$
Replace matches with: $lower($1)
case-sensitive comparison: check-mark

FYI
Terminology
Album, albumartist, comment, title, etc. are not properly called tags, they are called fields.
The tag is all of the user written metadata.
For example: an MP3 file may have an ID3v1 tag and/or an ID3v2 tag and/or a APEv2 tag.
Each tag is made up of all of the fields used.
%_tag% is the placeholder that is populated with the names of the tag types in the file (eg. ID3v1 APEv2).

Asking for Help - some suggestions
It is highly unusual to create an action by directly creating and/or editing the mta file from outside Mp3tag.
So it is rarely helpful to post the contents of the mta file.
It's clearer for others if they can see the edit dialogue for the action.
And nobody wants to wade through an action group that has multiple actions.:wink:
It is better to isolate specific issues and deal with them one at a time.

You can post a screenshot of the edit dialogue, but it is probably better to take the time to describe it in text.
Use the same form as seen in the edit dialogue. (like I did, above)
I suggest using Preformatted text (</> in the toolbar of the reply window) for user-written information to avoid problems when copying and pasting.


#3

Thank you for your comprehensive reply.

As you mentioned tags, I was interested to see the ones listed within mp3tag so looked through the data folder. I then saw what you mean, as the following are labelled 'fields':

TITLE
ARTIST
ALBUM
YEAR
TRACK
GENRE
COMMENT
_DIRECTORY
ALBUMARTIST
COMPOSER
DISCNUMBER

I notice that _FILENAME is missing from this list, doesn't that seem strange?

Not missing in documentation though:

https://help.mp3tag.de/main_tags.html
ALBUM
ALBUMSORT
ALBUMARTIST
ALBUMARTISTSORT
ARTIST
ARTISTSORT
BPM
COMMENT
COMPILATION
COMPOSER
COMPOSERSORT
CONDUCTOR
CONTENTGROUP
COPYRIGHT
DISCNUMBER
ENCODEDBY
ENCODERSETTINGS
ENCODINGTIME
FILEOWNER
FILETYPE
GENRE
GROUPING
INITIALKEY
INVOLVEDPEOPLE
ISRC
LANGUAGE
LENGTH
LYRICIST
MEDIATYPE
MIXARTIST
MOOD
MOVEMENTNAME
MOVEMENT
MOVEMENTTOTAL
MUSICIANCREDITS
NETRADIOOWNER
NETRADIOSTATION
ORIGALBUM
ORIGARTIST
ORIGFILENAME
ORIGLYRICIST
ORIGYEAR
PODCAST
PODCASTCATEGORY
PODCASTDESC
PODCASTID
PODCASTKEYWORDS
PODCASTURL
POPULARIMETER
PUBLISHER
RATING MM
RATING WMP
RELEASETIME
SETSUBTITLE
SUBTITLE
TAGGINGTIME
TITLE
TITLESORT
TRACK
UNSYNCEDLYRICS
WWW
WWWARTIST
WWWAUDIOFILE
WWWAUDIOSOURCE
WWWCOMMERCIALINFO
WWWCOPYRIGHT
WWWPAYMENT
WWWPUBLISHER
WWWRADIOPAGE
YEAR

I had looked through the documentation and find it strange some things are undocumented like _TAG & _ALL. From reading other posts there is a danger that irrelevant tags will be affected by using these 'pseudo-fields' with undesirable results.

Otherwise tags and functionality are documented here:
http://help.mp3tag.de/main_scripting.html
http://help.mp3tag.de/main_converter.html#ftf

Having identified the disadvantages of using 'pseudo-fields', it is frustrating that there is not more functionality for changing multiple specific tags at the same time.

In one of my other posts this was explored but of limited success using guess values. For example, I have a list of band names that I want to force to uppercase, but at the moment this means reproducing the list for several fields, which means if adding or removing from the list, it becomes very onerous.

It would be much better to have one action within an action group to tackle all these fields at once, such as ALBUMARTIST, ARTIST & ARTISTS. Even better, it would be able to cope with _FILENAME & _DIRECTORY to cover all the relevant fields. There do appear to be limitations to using guess values in this way, in part because this use of functionality is not documented and because I still have limited understanding of correct syntax. This means I could be wasting my time trying to make something work that others know wont in the first place or I can't make it work when someone else could because it has not been written correctly.

Here is an example:

Guess values:
$replace(%ALBUMARTIST% === %ARTIST% === %ARTISTS%,'^(abba|adda|absrdst|acdc|ac dc|akdong musician|bkpr|blk jks|bts|chllngr|chvrches|chll pll|dfrnt|diiv|dmc|dnce|drwn|dtcv|dwntwn|dvsn|dvsr|exo-k|grmln|haim|htrk|hxlt|inxs|jmsn|jpnsgrls|kaytranada|kda|kshmr|ladybaby|lany|lee hi|lndn drgs|lnzndrf|lvthn|mgmt|mika|mnek|mndrmnek|ms mr|mstrkrft|n sync|nsync|partynextdoor|pwr bttm|pza|rdgldgrn|rkcb|rlyr|rÜfÜs du sol|rvivr|ry x|sbtrkt|shxcxchcxsh|sophie|stnnng|strfkr|swmrs|tnght|tr/st|tts|tstr|walk the moon|wzrd|u2|u-kiss|unkle|wstrn|xtrmst|zayn)$',$upper(%ALBUMARTIST% === %ARTIST% === %ARTISTS%)

String:
%ALBUMARTIST% === %ARTIST% === %ARTISTS%

Is this written correctly? Can you see a way of making this work correctly with _FILENAME and _DIRECTORY given the limitations forced onto mp3tag by Windows?


#4

I suggested before that you should test your expressions with the Convert>Tag-Tag function.
The example that you give mixes IMHO the syntax for regular expressions and a normal replace. So it would be better to give an example that has been tested.
The field ARTISTS is a user-defined field and no standard field - this could be intentional or not, I don't know, it just strikes me.

I am not sure what you saw in the data folder but this is by far not the complete list of fields nor does it mean that _DIRECTORY is actually part of the tag data that goes with the file. As soon as you move the file, you get new data in this pseudo-field, something that should not happen to ordinary field data.


Using TAG in actions/combining actions for different tags
#5

This was the part where I think that revising the workflow would be a good idea.
It would be much simpler to deal with one field first and get it totally right and then simply copy this field to another (usually when ALBUMARTIST and ARTIST are the same) or use it as part of the filename or folder - instead of applying the whole bunch of actions to the next field again.
When I look at those 93 (! you must be joking - who is supposed to debug that?) actions I see far too many that fiddle about with the filename and the directory - I bet that they have been copied from somewhere and the field name has been replaced by you.
The only real property that a filename has to have is: being unique in the current file system. The case is completely void (if it is a filesystem that does not care about the case).
Together with the need to follow syntax rules for (fully qualitfied) filenames, the filenames cannot even be used as proper data storage as a lot of specialities will be lost.
So I still think that all the effort spent to get the case right, is more or less spent in vain, esp. if it only deals with the filename and has no corresponding source in the tag data.


#6

Thank you for your reply.

I have always been very concerned with filenames and, like many (I am sure) feel strongly about this being consistent and not all lower case.

In relation to the code example given, I have already advised that it is a modified version of the Grammartron script, which includes part of someone else's script to deal with elements the other script did not deal with.

My only real additions relate to the upper case of band names and change of directory.

I explained previously that I was testing using convert tag > tag but this was not producing any results compared to properly testing via actions. You were telling me to test using convert tag > tag even when I was already and had posted screenshots to demonstrate.

Of the many times I tried convert tag > tag, I have come across very few instances where this has actually worked (even when using code verified by other users).

I will be looking through to see if there is a way of condensing the code further with reference to your suggestions, but would still appreciate a way of achieving the outlined results.

The fields were found in 'usrfields.ini'.


#7

$replace() allows pairs for search string and replace string, e.g. abba,ABBA
$regexp() allows the syntax like you used with ^, $, (..|..) for a range - but I am not sure that it works with $upper.
So if you simply use any code snippet that you have come across and mix it with more or less any function it is only too likely that a preview will not give you any result: this means that you will not get anything out of your construction.
Again I would like to draw your attention to the fact that the NTFS only reluctantly reacts to case changes when this change only effects the already existing letters.
NTFS has to believe that it actually has to create a new filename - the easiest way is to add a unique character while changing the case, e.g. at the end or the beginning and then, after the file has been renamed successfully with all the case changes, remove that character again.
This BTW is an NTFS problem, not an MP3tag problem, MP3tag helps you to overcome it. So you are not testing MP3tag behaviour but the NTFS.


#8

To be exact:

NTFS is case-sensitive (that is a readme.txt and a Readme.txt can exist in the same directory).
However, the API for file access in Windows applications is case-insensitive, which makes filenames case-insensitive from the application's point of view. Therefore, applications only have access to one of the files whose filenames only differ in case, and some commands may fail if the filename provided is ambiguous.

@ohrenkino already wrote an easy way to change it. Rename "readme.txt" to "readme.txt_ONLYTEMP" and then back to "Readme.txt"


#9

Thank you for your reply. I appreciate the explanation of code.

I have already acknowledged that this is a limitation of the Windows operating system. I have also shown in the original code that I have introduced an action to change the filename at the beginning and end of the script:

[#0]
T=2
F=_FILENAME
1=%_FILENAME%
2=%_FILENAME% \u2b14123\u2b15
3=0|0

[#94]
T=2
F=_FILENAME
1=%_FILENAME%
2=%TITLE%%FILETYPE%
3=0|0

Is this not sufficient to force the changes in Windows?


#10

Every time you want to manipulate only the case of the filename it has to go together also with a change in the number of letters.
And "each time" means "every action" and not just "every action group".
If you modify the composition of a filename plus you modify the case, then everything is fine as you create in fact a new filename.


#11

I think that is where I have gone wrong! Thank you for clarifying.

Out of interest, is my method above fine or is the one proposed by LyricsLover preferable? If so, how do I do that?

[#0]
T=2
F=_FILENAME
1=%_FILENAME%
2=%_FILENAME%%FILETYPE%_ONLYTEMP
3=0|0

[#94]
T=2
F=_FILENAME
1=%_FILENAME%
2=%TITLE%%FILETYPE%
3=0|0

Is that right?


#12

does this collection of actions change the case at all?
I think you just rename the file and add the %filetype% field (if that is filled at all).
Again: if you only change the case but the (number of) characters stay(s) the same then you have to apply the workaround. otherwise you create a new filename that is taken as it is, including the case.


#13

Starting from line 24-29, 47-57, 75-84 and 87-91 case is tackled. Was the code proposed correct for such a change to filename?


#14

@ohrenkino

Have you tested that recently? Or maybe I don't understand your point.
My experience is that Mp3tag will change the case of the filename directly without any other manipulation. I have NTFS disks on windows 10.

For example:

Action: Case Conversion
Field: _FILENAME
Case conversion: lower case

That produces lower case filename in Mp3tag and the file system.


#15

so everything is fine now?


#16

fine with me.........


#17

My head is spinning after all this assertion! Now we have disparity between users.


#18

@ryerman All my drives are NTFS running Windows 10. From my my own tests there does seem to be an issue.

To test this, I run one action which makes everything lowercase. Then I run my action group, which includes modifications to tags and the filename. All tags are updated correctly but on the first run the case of filenames remains lower case. If I run the action again, it seems to get corrected.

Do you have a script I can test which gave you different results to see if there is a discrepancy?

This is mine:

[#0]
T=5
! Replace square brackets with round=
F=_DIRECTORY
1=$replace(A:\\Music\\Record\\%artist%\\%album%,'[','(',']',')')

[#1]
T=9
! Remove Source=
F=SOURCE

[#2]
T=9
! Remove SourceID=
F=SOURCEID

[#3]
T=7
F=$replace(%album% \u003d\u003d\u003d %artist% \u003d\u003d\u003d %title%,'[','(',']',')')
1=%album% \u003d\u003d\u003d %artist% \u003d\u003d\u003d %title%

[#4]
T=5
! Replace square brackets with round=
F=_FILENAME
1=$replace(%TRACK% %TITLE%,'[','(',']',')')

[#5]
T=2
! Remove Album=
F=ALBUM
1= (Album)
2=
3=0

[#6]
T=2
! Remove Album=
F=_DIRECTORY
1= (Album)
2=
3=0

[#7]
T=2
! Remove Album=
F=_FILENAME
1= (Album)
2=
3=0

[#8]
T=2
! Remove Digital Album=
F=ALBUM
1= (Digital Album)
2=
3=0

[#9]
T=2
! Remove Digital Album=
F=_DIRECTORY
1= (Digital Album)
2=
3=0

[#10]
T=2
! Remove Digital Album=
F=_FILENAME
1= (Digital Album)
2=
3=0

[#11]
T=2
! Remove EP=
F=ALBUM
1= (EP)
2=
3=0

[#12]
T=2
! Remove EP=
F=_DIRECTORY
1= (EP)
2=
3=0

[#13]
T=2
! Remove EP=
F=_FILENAME
1= (EP)
2=
3=0

[#14]
T=2
! Remove LP=
F=ALBUM
1= (LP)
2=
3=0

[#15]
T=2
! Remove LP=
F=_DIRECTORY
1= (LP)
2=
3=0

[#16]
T=2
! Remove LP=
F=_FILENAME
1= (LP)
2=
3=0

[#17]
T=2
! Remove Single=
F=ALBUM
1= (Single)
2=
3=0

[#18]
T=2
! Remove Single=
F=_DIRECTORY
1= (Single)
2=
3=0

[#19]
T=2
! Remove Single=
F=_FILENAME
1= (Single)
2=
3=0

[#20]
T=4
F=DISCNUMBER
1=^(\\d+)/\\d+
2=$1
3=0

[#21]
T=5
F=TRACK
1=[$num(%track%,1)]

[#22]
T=4
F=_TAG
1=\\\\b(A|An|The|And|But|Or|So|After|Before|Out|When|While|Since|Until|Although|Even If|Because|About|Above|Across|Against|Along|Alongside|As|At|Below|By|During|For|From|In|Into|Of|Off|On|Onto|Over|Than|Through|Till|To|Under|Up|With|Within|Without)\\\\b
2=$lower($1)
3=0

[#23]
T=4
F=_TAG
1=^\\\\s*(\\\\w+)
2=$caps($1)
3=0

[#24]
T=4
F=_TAG
1=(\\\\w+)\\\\s*$
2=$caps($1)
3=0

[#25]
T=4
F=_DIRECTORY
1=\\\\b(A|An|The|And|But|Or|So|After|Before|Out|When|While|Since|Until|Although|Even If|Because|About|Above|Across|Against|Along|Alongside|As|At|Below|By|During|For|From|In|Into|Of|Off|On|Onto|Over|Than|Through|Till|To|Under|Up|With|Within|Without)\\\\b
2=$lower($1)
3=0

[#26]
T=4
F=_DIRECTORY
1=^\\\\s*(\\\\w+)
2=$caps($1)
3=0

[#27]
T=4
F=_DIRECTORY
1=(\\\\w+)\\\\s*$
2=$caps($1)
3=0

[#28]
T=4
! Trim Trailing, Preceding & Extra Spaces [1]=
F=_DIRECTORY
1=(\\s+$|^\\s+)
2=
3=0

[#29]
T=4
! Trim Trailing, Preceding & Extra Spaces [2]=
F=_DIRECTORY
1=\\s+
2= 
3=0

[#30]
T=4
! Enforce Correct Word Spacing [1]=
F=_DIRECTORY
1=([^\\s\\.;\\)\\]/])([&\\({\\[\\+])
2=$1 $2
3=0

[#31]
T=4
! Enforce Correct Word Spacing [2]=
F=_DIRECTORY
1=(&|\\)|\\}|\\]|;|(?<!\\d),|,(?!\\d{3})|\\+)([^\\s\\.;\\(\\[/])
2=$1 $2
3=0

[#32]
T=4
! Enforce Correct Word Spacing [3]=
F=_DIRECTORY
1=\\b([a-z])\\s(&)\\s([a-z])\\b
2=$1$2$3
3=0

[#33]
T=4
! Enforce Correct Word Spacing [4]=
F=_DIRECTORY
1=([\\(\\[])\\s
2=$1
3=0

[#34]
T=4
! Enforce Correct Word Spacing [5]=
F=_DIRECTORY
1=\\s(\\]|\\)|\\?|:|;|,|\\.(?!\\.\\.))
2=$1
3=0

[#35]
T=4
! Enforce Correct Word Spacing [6]=
F=_DIRECTORY
1=(".*?")([^\\s\\]\\)/\\}!\\-\u003d,.;])(?!$)
2=$1 $2
3=0

[#36]
T=4
! Enforce Correct Word Spacing [7]=
F=_DIRECTORY
1=([^\\s\\[\\(/\\{])(".*?")
2=$1 $2
3=0

[#37]
T=4
! Enforce Correct Word Spacing [8]=
F=_DIRECTORY
1=(\\.(?<!\\.\\.))(?![\\s\\.':;\\)\\]"])(?![\\l\\u](\\.|$| ))(?!$)(?!\\d)(?!(co|com|uk|net|org|gov|edu|mil|html?|php))
2=$0 
3=0

[#38]
T=4
! Enforce Correct Word Spacing [9]=
F=_DIRECTORY
1=ww.\\s
2=ww.
3=0

[#39]
T=4
! Enforce Correct Word Spacing [10]=
F=_DIRECTORY
1="\\s?(.*?)\\s?"
2="$1"
3=0

[#40]
T=4
! Add Apostrophe to "Are" Contractions=
F=_DIRECTORY
1=\\b(how|they|what|when|why|you)re\\b
2=$1're
3=0

[#41]
T=4
! Add Apostrophe to "Have" Contractions=
F=_DIRECTORY
1=\\b(could|how|i|might|must|should|we|what|where|would|you)ve\\b
2=$1've
3=0

[#42]
T=4
! Add Apostrophe to "Is" Contractions=
F=_DIRECTORY
1=\\b(he|here|how|she|that|there|two|what|when|where|who|why)s\\b
2=$1's
3=0

[#43]
T=4
! Add Apostrophe to "Not" Contractions=
F=_DIRECTORY
1=\\b(ain|aren|can|couldn|didn|doesn|don|hadn|hasn|haven|isn|mightn|mustn|shouldn|wasn|weren|won|wouldn)t\\b
2=$1't
3=0

[#44]
T=4
! Add Apostrophe to "Will" Contractions=
F=_DIRECTORY
1=\\b(how|it|that|there|they|what|when|where|who|you)ll\\b
2=$1'll
3=0

[#45]
T=4
! Title Case Conversion [1] (Convert Words to Mixed-Case, Ignoring Upper-Case Letters)=
F=_DIRECTORY
1=([-({\\[\\]}) _",.+&@;*])(\\l)
2=$1$upper($2)
3=1

[#46]
T=4
! Title Case Conversion [2] (Capitalise First Word)=
F=_DIRECTORY
1=^(\\l)
2=$upper($1)
3=1

[#47]
T=4
! Title Case Conversion [3] (Articles, Conjunctions & Short Prepositions to Lower-Case, Except Before or After Punctuation)=
F=_DIRECTORY
1=(?<!&|:|;|-|/|!|(?<![A-Z]\\.[A-Z])\\.|\\?|\\+)(\\s+\\b(A|An|And|As|At|But|By|De|Et|For|From|In|Into|Le|Nor|Of|Off|On|Onto|Or|So|Than|The|To|Upon|Von|With)(?\u003d\\s)(?!\\s[\\-\\(\\)\\[\\]{}]))
2=$lower($1)
3=1

[#48]
T=4
! Title Case Conversion [4]=
F=_DIRECTORY
1=(^|\\s|\\(|\\[|/)'(.{1})
2=$1'$upper($2)
3=0

[#49]
T=4
! Title Case Conversion [5] (Capitalise "to" Before Common Verbs)=
F=_DIRECTORY
1=(to\\s+)\\b(Ask|Be|Begin|Believe|Bring|Buy|Call|Care|Change|Cheat|Come|Cry|Dance|Die|Do|Dream|Fall|Feel|Find|Forget|Get|Give|Go|Hate|Have|Hear|Hide|Hold|Keep|Know|Laugh|Learn|Leave|Let|Lie|Listen|Live|Look|Lose|Love|Make|Mean|Miss|Move|Marry|Need|Play|Pretend|Promise|Put|Remember|Return|Ride|Run|Say|See|Sell|Send|Set|Show|Sing|Speak|Stand|Stay|Steal|Stop|Take|Talk|Tell|Thank|Think|Touch|Travel|Try|Use|Wait|Walk|Want|Win|Wish|Work|Write)\\b
2=$caps($1)$2
3=1

[#50]
T=4
! Forced Upper-Case for Named Abbreviations and Acronyms=
F=_DIRECTORY
1=\\b(ac|aka|aol|ap|asap|atm|bbc|bc|bce|blt|btw|cbs|cc|cd|cia|dc|dj|doa|emi|ep|faq|fbi|fm|fr|gb|gi|imho|ira|irs|jc|kkk|lp|mc|mgm|mtv||nasa|nbc|npr|ny|nyc|ok|ost|pm|ps|qed|rca|rpm|sos|tba|tlc|tv|ufo|uk|usa|ussr|va|ymca)\\b
2=$upper($1)
3=0

[#51]
T=4
! CamelCase Irish Names Beginning with O'=
F=_DIRECTORY
1=\\b(O'[a-z]|O\\x{2019}[a-z])
2=$upper($1)
3=1

[#52]
T=4
! CamelCase Scottish Names Beginning with Mc=
F=_DIRECTORY
1=\\b(Mc)((?:[a-z]|-){3,})
2=$1$caps2($2,-)
3=1

[#53]
T=4
! CamelCase Common Scottish Names Beginning with Mac=
F=_DIRECTORY
1=\\b(Mac)(Alister|Arthur|Askill|Bain|Coll|Donald|Dougall|Dowell|Duff|Ewen|Farlane|Gregor|Intyre|Kenzie|Kinnon|Laren|Lean|Leod|Millan|Nab|Neil|Pherson|Rae)\\b
2=$1$caps2($2)
3=0

[#54]
T=4
! Roman Numerals to Upper-Case (Up to LXXIX, or 89)=
F=_DIRECTORY
1=\\b(?:L?X{0,3}|XL)(?:V?I{0,3}|I[VX])(?\u003d(\\.\\s|\\s|\\)|$))
2=$upper($0)
3=0

[#55]
T=4
! Common Latinisms and Miscellany to Lowercase=
F=_DIRECTORY
1=(\\b(?:E\\.G|et\\sAl|Etc|I\\.E|Versus|Vs|Feat\\.\\s|Ft\\.\\s|(?<\u003d')N(?\u003d'))\\b)
2=$lower($1)
3=1

[#56]
T=4
! Trim Trailing, Preceding & Extra Spaces [1]=
F=_TAG
1=(\\s+$|^\\s+)
2=
3=0

[#57]
T=4
! Trim Trailing, Preceding & Extra Spaces [2]=
F=_TAG
1=\\s+
2= 
3=0

[#58]
T=4
! Enforce Correct Word Spacing [1]=
F=_TAG
1=([^\\s\\.:;\\)\\]/])([&\\({\\[\\+])
2=$1 $2
3=0

[#59]
T=4
! Enforce Correct Word Spacing [2]=
F=_TAG
1=(&|\\)|\\}|\\]|;|(?<!\\d),|,(?!\\d{3})|\\+)([^\\s\\.:;\\(\\[/])
2=$1 $2
3=0

[#60]
T=4
! Enforce Correct Word Spacing [3]=
F=_TAG
1=\\b([a-z])\\s(&)\\s([a-z])\\b
2=$1$2$3
3=0

[#61]
T=4
! Enforce Correct Word Spacing [4]=
F=_TAG
1=([\\(\\[])\\s
2=$1
3=0

[#62]
T=4
! Enforce Correct Word Spacing [5]=
F=_TAG
1=\\s(\\]|\\)|\\?|:|;|,|\\.(?!\\.\\.))
2=$1
3=0

[#63]
T=4
! Enforce Correct Word Spacing [6]=
F=_TAG
1=(".*?")([^\\s\\]\\)/\\}!\\-\u003d,.;:])(?!$)
2=$1 $2
3=0

[#64]
T=4
! Enforce Correct Word Spacing [7]=
F=_TAG
1=([^\\s\\[\\(/\\{])(".*?")
2=$1 $2
3=0

[#65]
T=4
! Enforce Correct Word Spacing [8]=
F=_TAG
1=(\\.(?<!\\.\\.))(?![\\s\\.':;\\)\\]"])(?![\\l\\u](\\.|$| ))(?!$)(?!\\d)(?!(co|com|uk|net|org|gov|edu|mil|html?|php))
2=$0 
3=0

[#66]
T=4
! Enforce Correct Word Spacing [9]=
F=_TAG
1=ww.\\s
2=ww.
3=0

[#67]
T=4
! Enforce Correct Word Spacing [10]=
F=_TAG
1="\\s?(.*?)\\s?"
2="$1"
3=0

[#68]
T=4
! Add Apostrophe to "Are" Contractions=
F=_TAG
1=\\b(how|they|what|when|why|you)re\\b
2=$1're
3=0

[#69]
T=4
! Add Apostrophe to "Have" Contractions=
F=_TAG
1=\\b(could|how|i|might|must|should|we|what|where|would|you)ve\\b
2=$1've
3=0

[#70]
T=4
! Add Apostrophe to "Is" Contractions=
F=_TAG
1=\\b(he|here|how|she|that|there|two|what|when|where|who|why)s\\b
2=$1's
3=0

[#71]
T=4
! Add Apostrophe to "Not" Contractions=
F=_TAG
1=\\b(ain|aren|can|couldn|didn|doesn|don|hadn|hasn|haven|isn|mightn|mustn|shouldn|wasn|weren|won|wouldn)t\\b
2=$1't
3=0

[#72]
T=4
! Add Apostrophe to "Will" Contractions=
F=_TAG
1=\\b(how|it|that|there|they|what|when|where|who|you)ll\\b
2=$1'll
3=0

[#73]
T=4
! Title Case Conversion [1] (Convert Words to Mixed-Case, Ignoring Upper-Case Letters)=
F=_TAG
1=([-({\\[\\]}) _",./+&@:;*])(\\l)
2=$1$upper($2)
3=1

[#74]
T=4
! Title Case Conversion [2] (Capitalise First Word)=
F=_TAG
1=^(\\l)
2=$upper($1)
3=1

[#75]
T=4
! Title Case Conversion [3] (Articles, Conjunctions & Short Prepositions to Lower-Case, Except Before or After Punctuation)=
F=_TAG
1=(?<!&|:|;|-|/|!|(?<![A-Z]\\.[A-Z])\\.|\\?|\\+)(\\s+\\b(A|An|And|As|At|But|By|De|Et|For|From|In|Into|Le|Nor|Of|Off|On|Onto|Or|So|Than|The|To|Upon|Von|With)(?\u003d\\s)(?!\\s[\\-\\(\\)\\[\\]{}]))
2=$lower($1)
3=1

[#76]
T=4
! Title Case Conversion [4]=
F=_TAG
1=(^|\\s|\\(|\\[|/)'(.{1})
2=$1'$upper($2)
3=0

[#77]
T=4
! Title Case Conversion [5] (Capitalise "to" Before Common Verbs)=
F=_TAG
1=(to\\s+)\\b(Ask|Be|Begin|Believe|Bring|Buy|Call|Care|Change|Cheat|Come|Cry|Dance|Die|Do|Dream|Fall|Feel|Find|Forget|Get|Give|Go|Hate|Have|Hear|Hide|Hold|Keep|Know|Laugh|Learn|Leave|Let|Lie|Listen|Live|Look|Lose|Love|Make|Mean|Miss|Move|Marry|Need|Play|Pretend|Promise|Put|Remember|Return|Ride|Run|Say|See|Sell|Send|Set|Show|Sing|Speak|Stand|Stay|Steal|Stop|Take|Talk|Tell|Thank|Think|Touch|Travel|Try|Use|Wait|Walk|Want|Win|Wish|Work|Write)\\b
2=$caps($1)$2
3=1

[#78]
T=4
! Forced Upper-Case for Named Abbreviations and Acronyms=
F=_TAG
1=\\b(ac|aka|aol|ap|asap|atm|bbc|bc|bce|blt|btw|cbs|cc|cd|cia|dc|dj|doa|emi|ep|faq|fbi|fm|fr|gb|gi|imho|ira|irs|jc|kkk|lp|mc|mgm|mtv|nasa|nbc|npr|ny|nyc|ok|ost|pm|ps|qed|rca|rpm|sos|tba|tlc|tv|ufo|uk|usa|ussr|va|ymca)\\b
2=$upper($1)
3=0

[#79]
T=4
! Forced Upper-Case for Band Names (regex: ^ is the beginning of the field and the $ the end)=
F=ALBUMARTIST
1=^(abba|absrdst|acdc|ac dc|adda|akdong musician|bkpr|blk jks|bts|chllngr|chvrches|chll pll|dfrnt|diiv|dmc|dnce|drwn|dtcv|dwntwn|dvsn|dvsr|exo-k|grmln|haim|htrk|hxlt|inxs|jmsn|jpnsgrls|kaytranada|kda|kshmr|ladybaby|lany|lee hi|lndn drgs|lnzndrf|lvthn|mgmt|mika|mnek|mndrmnek|ms mr|mstrkrft|n sync|nsync|partynextdoor|pwr bttm|pza|rdgldgrn|rkcb|rlyr|r\u00dcf\u00dcs du sol|rvivr|ry x|sbtrkt|shxcxchcxsh|sophie|stnnng|strfkr|swmrs|tnght|tr/st|tts|tstr|walk the moon|wzrd|u2|u-kiss|unkle|wstrn|xtrmst|zayn)\\b
2=$upper($1)
3=0

[#80]
T=4
! Forced Upper-Case for Band Names (regex: ^ is the beginning of the field and the $ the end)=
F=ARTIST
1=^(abba|absrdst|acdc|ac dc|adda|akdong musician|bkpr|blk jks|bts|chllngr|chvrches|chll pll|dfrnt|diiv|dmc|dnce|drwn|dtcv|dwntwn|dvsn|dvsr|exo-k|grmln|haim|htrk|hxlt|inxs|jmsn|jpnsgrls|kaytranada|kda|kshmr|ladybaby|lany|lee hi|lndn drgs|lnzndrf|lvthn|mgmt|mika|mnek|mndrmnek|ms mr|mstrkrft|n sync|nsync|partynextdoor|pwr bttm|pza|rdgldgrn|rkcb|rlyr|r\u00dcf\u00dcs du sol|rvivr|ry x|sbtrkt|shxcxchcxsh|sophie|stnnng|strfkr|swmrs|tnght|tr/st|tts|tstr|walk the moon|wzrd|u2|u-kiss|unkle|wstrn|xtrmst|zayn)\\b
2=$upper($1)
3=0

[#81]
T=4
! Forced Upper-Case for Band Names (regex: ^ is the beginning of the field and the $ the end)=
F=ARTISTS
1=^(abba|absrdst|acdc|ac dc|adda|akdong musician|bkpr|blk jks|bts|chllngr|chvrches|chll pll|dfrnt|diiv|dmc|dnce|drwn|dtcv|dwntwn|dvsn|dvsr|exo-k|grmln|haim|htrk|hxlt|inxs|jmsn|jpnsgrls|kaytranada|kda|kshmr|ladybaby|lany|lee hi|lndn drgs|lnzndrf|lvthn|mgmt|mika|mnek|mndrmnek|ms mr|mstrkrft|n sync|nsync|partynextdoor|pwr bttm|pza|rdgldgrn|rkcb|rlyr|r\u00dcf\u00dcs du sol|rvivr|ry x|sbtrkt|shxcxchcxsh|sophie|stnnng|strfkr|swmrs|tnght|tr/st|tts|tstr|walk the moon|wzrd|u2|u-kiss|unkle|wstrn|xtrmst|zayn)\\b
2=$upper($1)
3=0

[#82]
T=4
! Forced Upper-Case for Band Names (regex: ^ is the beginning of the field and the $ the end)=
F=TITLE
1=\\b(abba|absrdst|acdc|ac dc|adda|akdong musician|bkpr|blk jks|bts|chllngr|chvrches|chll pll|dfrnt|diiv|dmc|dnce|drwn|dtcv|dwntwn|dvsn|dvsr|exo-k|grmln|haim|htrk|hxlt|inxs|jmsn|jpnsgrls|kaytranada|kda|kshmr|ladybaby|lany|lee hi|lndn drgs|lnzndrf|lvthn|mgmt|mika|mnek|mndrmnek|ms mr|mstrkrft|n sync|nsync|partynextdoor|pwr bttm|pza|rdgldgrn|rkcb|rlyr|r\u00dcf\u00dcs du sol|rvivr|ry x|sbtrkt|shxcxchcxsh|sophie|stnnng|strfkr|swmrs|tnght|tr/st|tts|tstr|walk the moon|wzrd|u2|u-kiss|unkle|wstrn|xtrmst|zayn)\\b
2=$upper($1)
3=0

[#83]
T=4
! Replay Gain Correction [1]=
F=REPLAYGAIN_TRACK_GAIN
1=(\\+|-)?\\s?(\\d*\\.\\d*)\\sDB
2=$1$2 dB
3=0

[#84]
T=4
! Replay Gain Correction [2]=
F=REPLAYGAIN_ALBUM_GAIN
1=(\\+|-)?\\s?(\\d*\\.\\d*)\\sDB
2=$1$2 dB
3=0

[#85]
T=4
! CamelCase Irish Names Beginning with O'=
F=_TAG
1=\\b(O'[a-z]|O\\x{2019}[a-z])
2=$upper($1)
3=1

[#86]
T=4
! CamelCase Scottish Names Beginning with Mc=
F=_TAG
1=\\b(Mc)((?:[a-z]|-){3,})
2=$1$caps2($2,-)
3=1

[#87]
T=4
! CamelCase Common Scottish Names Beginning with Mac=
F=_TAG
1=\\b(Mac)(Alister|Arthur|Askill|Bain|Coll|Donald|Dougall|Dowell|Duff|Ewen|Farlane|Gregor|Intyre|Kenzie|Kinnon|Laren|Lean|Leod|Millan|Nab|Neil|Pherson|Rae)\\b
2=$1$caps2($2)
3=0

[#88]
T=4
! Roman Numerals to Upper-Case (Up to LXXIX, or 89)=
F=_TAG
1=\\b(?:L?X{0,3}|XL)(?:V?I{0,3}|I[VX])(?\u003d(\\.\\s|\\s|\\)|$))
2=$upper($0)
3=0

[#89]
T=4
! Common Latinisms and Miscellany to Lowercase=
F=_TAG
1=(\\b(?:E\\.G|et\\sAl|Etc|I\\.E|Versus|Vs|Feat\\.\\s|Ft\\.\\s|(?<\u003d')N(?\u003d'))\\b)
2=$lower($1)
3=1

[#90]
T=4
F=_FILENAME
1=$UPPER(%_FILENAME%)
2=
3=0

#19

No

@sheepdisease
It is unwise to create mta files in any way but through the program interface.
I tried to tell you earlier: it is unlikely that anyone wants to look at the contents of the mta file. I won't.

If you want help with this, you'll have to do some detective work on your own.

My suggestion is to test each action within the action group, one after the other.
You should apply the actions in the same order as they appear in the action group.
If / When you find an action that does not perform as you expect, then you can come back and describe your problem with one particular action

And I'll say again: don't be surprised when nobody tries to help you debug a multi-action action group, especially one with 90+ actions.

It is best to be precise and accurate and include all important information and none that is not useful.
You will find few people willing to help by simply posting the mta file contents and asking "what's wrong?"
Maybe this will help: How To Ask Good Questions


#20

Good advice. I will follow it accordingly.

I just wanted to let you know, just because I copy the contents of the mta file into posts doesn't mean I created the action in that way. It's just a lot easier to show the contents this way.