Advanced filtering


I would like to know if there is a way to find files with title tag bearing resemblance to album tag

For example, I would like to find a file with tags like these:

TITLE: jklmnop qrstuv 12345
ALBUM: abcde fghijklmnop qrstuvwxyz

So basically I need to tell to the Mp3tag filter, that it needs to search for the same number [specyfic set] of character [including spaces], and to not to take into account whatever is before or after this set [in both title and album tag]. And I don't know what I'm exactly looking for- what I was looking for I will know only, if filter finds it for me [and I make a validations of this search, by reading the results]

The Mp3tag filter cannot read your thoughts, so you have to give a concrete order.

Search for both criteria together in one file ...
TITLE HAS "jklmnop qrstuv" AND ALBUM HAS "jklmnop qrstuv"

Search for both criteria in one or more files ... as well as ...
TITLE HAS "jklmnop qrstuv" OR ALBUM HAS "jklmnop qrstuv"


Yes. Or it has to be a constant pattern e.g. "cut away the last number"
$if($strstr($regexp(%title%, \d+,),%album%),1,0) IS 1

Unfortunately, that is useless for me

I would have to have in my brain all albums and all titles; to the letter. And I'm looking for some errors [in 20 000+ files], which would make it even more challenging

If somehow memorized that, then I wouldn't have to filter- I would simply go to any given file

That's what I'm looking for: patterns

The ideal code would work for example like this: find all files with [no less and no more than] 8 exact characters [including spaces and signs like : and -] in both TITLE and ALBUM tag, disregarding eventual capitalization

With a code from descibed above example I could find

TITLE: 01234567890: abc890- abc 01234567 8 9 0 a b c def
ALBUM: 890: ABC DEF 789000000000000

In a code like this all I would have to change [to see less or more records] would be the number of signs [without concern for where the resemblance starts / ends or if the set of characters has special signs like ":" or some digits] - is it possible to have such filter?

No. You either have to have a constant string for comparison or a pattern that has fixed delimiters.
It is not possible to grab e.g. the first 8 characters, scan for the pattern, then starting with the next character.
If you cannot supply a delimiter, then you have to use one of the entities like a word or a character. Anything beyond that is not possible AFIAK.
I still wonder about the purpose.
What's the use of finding by accident all the tracks with "I love you" in title and album?

And even if such a formal way of comparing would be possible, you still would not find all the files that have similarities semantically. A classic is the different approch to use punctuation. So with your idea you will not find the differences.

It is possible to compare the string of a complete ALBUM with parts of a title as this sets the delimiter to the field boundaries.

Of yourse you can set a filter where you set the offset with $mid()
First filtering would be $mid(%title%,1,8)
Second filtering would be $mid(%title%,2,8)
and so on. But you have to set it. There is not automatism.

I still have my problems to understand why such a more or less random comparison should propell the maintenance of a collection.
OK, I would find the title Tusk on the album Tusk (Fleetwood Mac). So? What about the other tracks?
I would find the track "calling all stations" on the album "... calling all stations" - both in the correct spelling. So?
Or there is the album "... Featuring" by Norah Jones - but the "feat." is only part of the real title (and it is shorter than the 8 characters and has a different punctuation). No mistake could be spotted there.
I get the impression that this approach will lead a lot of false hits and leave out just as many real mistakes.
So: what's the point, where is the benefit?

Hmm, your example strings show and need a case insensitive substring matching.
The Mp3tag Filter operator HAS can do this.
TITLE HAS "890: abc" AND ALBUM HAS "890: abc"

If you need a pattern matching then use the Mp3tag Filter operator MATCHES with a fitting regular expression.
TITLE MATCHES "890:\sabc" AND ALBUM MATCHES "890:\sabc"
TITLE MATCHES "890: abc" AND ALBUM MATCHES "\d\d\d....."


This I don't understand

The overall benefit is: having an exact order, once a system [nomenclature] is established- which in turn gives accurate information in 99.99% cases just by looking at titles [assuming, there are no errors]

Example: I have an "Terminator 3: Rise of the Machines Original Motion Picture Soundtrack" album, in two versions. In my collection [system] those album are named "Terminator III: Rise Of The Machines Score" and "Terminator III: Rise Of The Machines Score". Let say, I had on those albums tracks named

"The Terminator"
"Terminator 3 Main Title"
"Rise of the Machines End Titles"

In my system, they have to be named

"The Terminator" [no change, don't ask why]
"Terminator III Opening Titles"
"Terminator III Closing Titles"

Changing names of the albums is the easy part. Changing names of titles is more time consuming. And if I forget to do something or make an error at it, then corrections are made only by a chance: if somehow I spot something familiar / suspicious in player [displaying me the tags]

In this example, a common mistake for me is not putting the proper number ["II" instead of "III"]. So if if could make a search for a set of 10 sign in both TITLE and ALBUM, I would find all "terminator"'s [also from other related albums, like "Terminator II: Judgment Day Score"]- and then I would take a look at them and manually check for errors [I would get possibly hundreds of files, but I could validate them in alphabetical order]. And as I don't need to look at for titles things like "John Connor Looks At T-800" or "Shootout Part 2" or "Big Explosion" [because there are no Terminator movies with "T-800", "shooutot" or "explosion" in their titles], such a filter wouldn't show me all those irrelevant cases

So my question now is- can I have a simplified filter working like that: find all files with the same TITLE and ALBUM tags, but only to the [for example] sixth [counting from the beginning] sign of both those tags ?

A filter like that would find me [among others]:

"Terminator III Opening Titles" from album "Terminator III: Rise Of The Machines Score"
"Terminator III Closing Titles" from album "Terminator III: Rise Of The Machines Score"
"Terminator II Opening Titles" from album "Terminator II: Judgment Day Score"
"The Devil You Know Opening (Movie Edit)" from album "The Devil You Know Score"
"Dark Void Credits" from album "Dark Void Videogame Score"
"Con Air Overture" from album "Con Air Score"
"Reanimation Opener" from album "Reanimation"

That would find me something like 95% of what I need to check for errors, because almost every track "nomenclatured" by me has on the beginning of its TITLE the name of the ALBUM

And if you ask me, why do I change titles sometimes so profoundly, beyond recognition to someone not familiar with my nomenclature, I will explain:

  • those files are for me; most people don't give a flying duck about what or who they are listening to, but I like to educate myself musically
  • editors / musicians / online services / record companies do not follow any universal / global rules- so if you put together enough albums / songs, you will get a naming / authorship chaos; a mix is something different than remix, a megamix is something different than mashup, a "versus" put between two artist is just some crappy publicity stunt in reality meaning nothing special [and is to be disregarded], "vs." and "V." can be easily used to distinguish between two different things etc.
  • the same track can be named in different manner on different official releases; "titles" becomes "main titles", an "the" is missing or added, "Part 2" becomes "Pt. II" etc.
  • by looking at my titles I can tell right away if for example an "intro" of a track is a "intro" from a movie or videogame or maybe and opening of a whole album or just a prelude to a song; official [original] nomenclature in many cases is ambiguous or even misleading / incorrect
  • as the times goes by, there are more and more cases of movies and games bearing the same title; and also there are all those sequels and remakes
  • if you have enough score albums in your collection, you will get things like titles officially named only "Main Titles" by the hundreds; with a few "Main Titles" by the same composer [from different movies]
  • if I ever have to change some "system" word or split some kind of tracks in two subcategories, I will easily find them by putting int filter proper combination of system words

Sometimes "nomenclatured" tracks look odd- but as empirical data shows me, a well designed system like mine just works

If you want to see, if a sub-string is in another string, you can use
"$if($strstr(%album%,$mid(%title%1,8))),yes,no)" IS yes
checks if the first 8 characters of TITLE are in ALBUM somewhere.
This would not yet find the terminator in "Terminator" and "The Terminator". For this, you would have to scroll forward to
"$if($strstr(%album%,$mid(%title%5,8))),yes,no)" IS yes
which cuts 8 characters out of title, starting at character 5.
So, if you want to scan through your collection like this, you are welcome. If you insist on an automatism: hard luck.

Filter examples This works ... case sensitive "$ifgreater($strstr($left(%TITLE%,6),$left(%ALBUM%,6)),0,1,0)" IS 1

... or ...

"$strstr($left(%TITLE%,6),$left(%ALBUM%,6))" GREATER 0

... or ...

"$strstr($left(%TITLE%,6),$left(%ALBUM%,6))" IS 1 case insensitive "$ifgreater($strstr($lower($left(%TITLE%,6)),$lower($left(%ALBUM%,6))),0,1,0)" IS 1

... or ...

"$strstr($lower($left(%TITLE%,6)),$lower($left(%ALBUM%,6)))" GREATER 0

... or ...

"$strstr($lower($left(%TITLE%,6)),$lower($left(%ALBUM%,6)))" IS 1 This does not work ... "$left(%TITLE%,6)" EQUAL "$left(%ALBUM%,6)" NOT ("$left(%TITLE%,6)" EQUAL "$left(%ALBUM%,6)")


That one gives me the most records; although the difference in numbers, between 4 of your working codes, is minimal. But as I understand, that one disregards [doesn't take into consideration] the eventual capitalization of letters?

And one more related question: is there a way to permanently save a code like that into filter, for later quick usage? Every now and then, I have all those previous codes and words [titles, artists names, years etc.]; and it comes a time when the are just to many and I just have to remove them all from history [I don't want to pick them one by one and left out the good ones, becaause it take too much time / attention and it is easy to make an mistake]. It would come in handy, if there was something like actions groups for filter, which could be created, named and saved. And if it doesn't exist, I'll write about it General Discussion

Yes the function $lower() does it.

Hmm ... how about a simple text file as a sticky note, together with helpful remarks?


I can also pin to a text file on a Taskbar [in Windows 7]; and that's what I'm already using

But that's a workaround; which generates me additional open window / application; it takes space and / or adds to overload of information on the screen / Taskbar

Something like customizable ready-to-use filters should be implemented in future versions: most likely under that icon on the right side of filter input field

You may add a "Tool" entry in "Mp3tag options" ... for example ...

Name: Open my &Knowledge Base
Parameter: '"'$getEnv('USERPROFILE')'\Documents\Mp3tag\MyMp3tagKnowledgeBase.txt"'
For all selected files: no

Make sure that all filepathnames exist before testing.


Let's break it down fo the dummies

1] Name
Whatever I want to call it. That I get

2] Path
What executable? That of Mp3tag or just the Notepad EXE?

3] Parameter
What does this "$getEnv" will do? As I understand, I'm suppose to give a path to some existing text file- but what is suppose to happen with that text file and where [how]? Can somehow make a new icon [shortcut] in Mp3tag?

4] For all selected files
What happens with "yes"?

I was wondering what the "Tools" in "Tools" were for; and maybe now I will

The manual [] doesn't give any isnight into what you kindly proposed for me; so someone, please explain further

About Mp3tag Tools feature and examples of different tool configurations ... read there ...

$getEnv() is a function call to the Windows operating system, in order to get the current content of a so called "environment variable".

Using a well known "environment variable" has advantages in contrast to hard-coded paths and filenames.

Good question.
Calling an application, which is made for invoking one file only, to be opened for multiple instances, ...
all together at once, for example for ten or hundred or thousands of files, ...
can make the computer system unusable for user intervention.


That was very helpful, thank you

The short simplified answer / explanation would be: you can create a list of shortcuts [called "Tools"] to whatever programs you like and open them with parameters; which in return will save you time, bacause the list with Tools [edited in menu Tools] is accessible in the context menu [right click on any file]

So I've created an entry in Tool for notepad.exe with a parameter bearing a path to my already existing TXT file with musical information. I will put now all those filters on top of this file. And that is handy but it is still only a workaround. Becasue even if I use CTRL + 1 for opening the file, I still have to select, copy, [go back to Mp3tag], and paste the code

The filter's list menu [under the icon] should be definable. Now by programmers default I have there a ready to use [paste] >> %language% << code, which I can memorize but I know I will never use; and don't have a >> "$ifgreater($strstr($lower($left(%TITLE%,6)),$lower($left(%ALBUM%,6))),0,1,0)" IS 1 << which is hard to memorize and even harder to write down without an error, which I will use often. It would be much easier if I could just kick out the first one and add the second to the list

Yes, sometimes it would be handy to load a prepared list of filter expressions.
While in the Filter dialog a selected list entry can be removed by pressing [Shift]+[Del] ...
or use the features from the Filter [>] menu.


1 Like