Filterausdruck für Vergleich Filename/Track

Ich bin dabei meinen MP3-Bestand auf Fehler durchzusehen und komme bei Filterausdrücken nicht weiter, die mir dabei helfen sollen.

Die Dateinamen haben das Format: $num(%track%,2) - %artist% - %title%.
%track% ist nach folgendem Muster gefüllt: 01/14 oder 001/100

Ich will die Dateien angezeigt bekommen, bei denen die Dateinamen nicht dem Namensmuster entsprechen, also

  • die Ziffern von %track% vor dem "/ " nicht mit demTrackteil des Dateinamens
  • %artist% nicht mit dem Interpretenteil des Dateinamens
  • %title% nicht mit dem Titelteil des Dateinamens
    wobei das aus praktikablen Gründen 3 verschiedene Filtern sein dürfen und auch sollten.

Eine einfache Lösung durch komplettes Neubenennen durch eine Aktion verbietet sich, da ich wegen der sich ergebenden zu langen Dateinamen in etlichen Fällen gezwungen war Titel und/oder Artist zwar nicht im Tag aber beim Dateinamen zu kürzen. Es ist also eine Inaugenscheinnahme vor Korrekturen erforderlich.

Du kannst doch %_filename% und den String zum Erzeugen miteinander vergleichen. Alle Treffer haben dann irgendwo ne Macke:

'$if($eql(%_filename%,'$num(%track%,2) - %artist% - %title%'),1,0)' IS '0'

Du kriegst allerdings damit keine Anzeige "Nummer stimmt nicht" oder so was.

Danke Ohrenkino.
Irgendwie hatte ich wohl ein Brett vorm Kopf. Allerdings stehe ich ohnehin mit Anführungszeichen (ob doppelt oder einfach oder gar nicht) in Filterausdrücken auf dem Kriegsfuß.

Jetzt taucht leider das Problem der in Dateinamen verbotenen Zeichen auf, d.h. überall wo im Titel z.B. ein Fragezeichen steht, bekomme ich falsche Treffer. Funktioniert eigentlich $validate() in Filterausdrücken nicht? Irgendwie klappt es nicht, wenn ich es wie folgt verwende

"$if($eql(%_filename%,'$validate($num(%track%,2) - %artist% - %title%')),1,0)" IS 0

Ist da nicht das letzte ' zu früh dran und muss hinter die Klammer?

"$if($eql(%_filename%,'$validate($num(%track%,2) - %artist% - %title%)'),1,0)" IS 0

Dann kannst du bei $validate() ja auch noch das Ersetzungszeichen definieren. Ist das vielleicht nicht nur "weglassen", sondern ggf. ein "_"?

Ja. Ich sagte ja, ich stehe mit den Dingern auf Kriegsfuß. :wink:

Allerdings funktioniert es mit den einfachen Anführungszeichen überhaupt nicht.

Funktioniert (ohne einfaches Anführungszeichen):
"$if($eql(%_filename%,$num(%track%,2) - %artist% - %title%),1,0)" IS 0

Funktioniert nicht:
"$if($eql(%_filename%,'$num(%track%,2) - %artist% - %title%'),1,0)" IS 0
"$if($eql(%_filename%,'$validate($num(%track%,2) - %artist% - %title%)'),1,0)" IS 0
"$if($eql(%_filename%,$validate($num(%track%,2) - %artist% - %title%)),1,0)" IS 0

Nein. Ich teste es ja gerade mit einem Album, wo in einem Titel-Tag am Ende ein Fragezeichen steht und das im Dateinamen einfach nur weggelassen wurde. Es ist kein Leerzeichen im Spiel.

Was in einfache Apostrophzeichen eingefasst ist, daraus wird reiner Text.

Das funktioniert doch, oder ...?
"$if($eql(%_filename%,$num(%track%,3)' - '%artist%' - '%title%),1,0)" IS "1''

DD.20160709.1217.CEST

Danke für die Erklärung.
Das hier funktioniert:
"$if($eql(%_filename%,$num(%track%,2)' - '%artist%' - '%title%),1,0)" IS "0"

$num(track%,2) deckt sowohl Fälle mit zweiziffrigen als auch dreiziffrigen Tracknummern ab.

Allerdings kann man wohl $validate() zusätzlich im Filter nicht verwenden?

"Doppelt gemoppelt" könnte man schreiben ...
"$if($eql($validate(%filename%,''),$validate($num(%track%,3)' - '%artist%' - '%title%,'_')),1,0)" IS "1"

Aber weil ein existierender Dateiname bereits valide ist, geht es auch kürzer ...
"$if($eql(%filename%,$validate($num(%track%,3)' - '%artist%' - '%title%,'')),1,0)" IS "1"
... oder ...
"$if($eql(%_filename%,$validate($num(%track%,3)' - '%artist%' - '%title%,)),1,0)" IS "1"

Die Frage ist, welche Art von Validierung der Dateiname zuvor erhalten hat, ...
wurden ungültige Zeichen ersetzt oder gelöscht?

DD.20160709.1254.CEST

Sie wurden gelöscht.
Vielen Dank für deine hilfe.

Meine Fehlversuche mit $validate() wurden durch ein fehlendes Komma hinter %title% hervorgerufen.