Dateinamenformat

Hi,

Ich würd euch gern mal zeigen wie ich von den Tags meinen Dateinamen zusammenstellen lasse:

$if(%artist%,%artist%" - ","")$if(%album%,%album%" - ","")$ifgreater(%track%,9,$sub(%track%,/%%)". ",$if(%track%,"0"$sub(%track%,/%%)". ",""))%title%

Der Formatiert den Dateinamen nach "Künstler - Album - Tracknr. Titel"

Beispiele:

Dela - Atmosphere Airlines Vol.1 - 03. Stakes Is High.mp3
Envoys - Violescent - 04. Ego Is the Mankiller.mp3
65daysofstatic - The Fall Of Math (deluxe edition) - 02. install a beak in the heart that clucks time in arabic.flac
Oliver Huntemann - Magnet.mp3

Dabei ist die Tracknummer immer zweistellig und wird, wenn es sein muss, um eine 0 ergänzt.

Es funktioniert für mich ziemlich gut so und vielleicht hilft das dem ein oder anderen.

MFG
Torben

Kennst du die besondere Funktion der eckigen Klammern für den Konverter Tag-Dateiname?
eine $if-Konstruktion kannst du mit
[%artist% -]
abkürzen.

Da auch ein führender Bindestrich möglich ist, was ich als Dateinamen seltsam finde.

Die Funktion $num(%track%,2) würde eine Zahl auf 2 Stellen auffüllen und wäre ggf. kürzer als die $ifgreater Abfrage.

Also ich würde für ein ähnliches Ergebnis es so tun:
[%artist% - ][%album% - ][$num(%track%,2). ]%title%

Hallo Torben, da hast du uns ja ein schönes Osterei geschenkt.
Es wirft mehr spezielle Fragen auf, als dass es eine Lösung für den Alltag wäre.

  1. Was ist das für ein Tagfeld %_% ?
    Wie kommt es in die Datei hinein und welchen Wert hat es, so dass es sinnvoll in der Funktion $sub benutzt werden kann?

  2. Warum benutzt du das Doppel-Apostroph, wenn doch in Mp3tag das Einfach-Apostroph eine Zeichenkette begrenzt?

  3. Warum benutzt du zwei Doppel-Apostrophe (""), was willst du damit bewirken?

  4. Mit ...
    ARTIST = Alanis Morissette
    ALBUM = Ironic
    TITLE = You Oughta Know
    TRACK = 05/05
    ... ergibt dein Formatstring folgendes Ergebnis ...
    Alanis Morissette" - "Ironic" - ""0"5". "You Oughta Know

Siehe auch ...
Share your custom Actions

DD.20140421.1150.CEST

danke

%_% hat bei mir immer so Funktioniert dass es ein Platzhalter für irgendetwas beliebiges ist.
Manchmal sind ja Tracks in dieser Form gespeichert: 4/9. Da wird daraus dann 04 gemacht.

doppel apostrophe haben bei mir immer genauso funktioniert wie einfache. Mit zwei von denen wollte ich eine leere Zeichenkette einfügen.

Ich werd wohl in Zukunft den code von ohrenkino benutzen:
[%artist% - ][%album% - ][$num(%track%,2). ]%title%

Es ist tatsächlich möglich, z. B. im Dialog "Erweiterte Tags..." ein Tagfeld anzulegen mit dem Namen "" (nur ein Unterstrich), aber dieses Tagfeld kann man beim Scripting nicht auslesen.
Der %%-Inhaltsoperator gibt keinen Wert zurück ... %
% funktioniert nicht.

Aus ...
"0"$sub(%track%,/%_%)"
wird z. B. ...
"0"3"
... und das ist Murks.

Das kann ich nicht glauben.

In Mp3tag gibt es leider kein Symbol, das eine leere Zeichenkette darstellt.
Was leer ist, das existiert nicht oder wird einfach nicht geschrieben.

$replace('1+1','+',)

... das Ergebnis ist '11'

Gelegentlich sieht man in einem Skriptausdruck den Platzhalter %DUMMY%.
Dabei muss man darauf achten, dass in der gerade bearbeiteten Datei ein Tagfeld mit dem Namen DUMMY nicht vorhanden ist, denn sonst wird der in DUMMY gespeicherte Inhalt verwendet.

Ein sinnvoller passabler Skriptausdruck ist ...

$replace('1+1','+',$char(0))

... das Ergebnis ist '11'
... wobei tatsächlich/vermutlich das eine Zeichen hex 00 erzeugt wird, ...
was als Ende einer Zeichenkette interpretiert wird, ...
und somit eine leere Zeichenkette darstellt.

Wenn man in einem Skriptausdruck dem Leser deutlich machen will, dass an einer bestimmten Stelle das blanke 'Nichts' ist, dann kann man dort schreiben $char(0).

DD.20140429.1811.CEST

Hat es aber. Vielleicht ist bei mir auch einfach irgendwas kaputt oder so oder es ist weil ich nicht die aktuellste version hab. (2.54)

Bitte zeige Skript-Beispiele ...
... die das einfache Apostroph (') (single quote)
... die das doppelte Anführungszeichen (") (double quote)
verwenden.

Bitte erkläre wie diese Funktion arbeitet ...
$sub(x,y) ... subtrahiert y von x und liefert das Ergebnis

... konkret bei diesem Ausdruck:
$sub(%track%,/%_%)

DD.20140429.1822.CEST

Die Beispiele die ich ganz oben genannt habe hab ich damit generiert

Wie ich in meiner post #3, betreffend deine post #1, bereits durch das Nachvollziehen des von dir angebotenen Skripting-Beispiels nachgewiesen habe, so funktioniert der Skriptausdruck nicht zufriedenstellend, ...
... es sei denn, es soll mit Absicht tatsächlich Murks dabei herauskommen.
Oder wende ich den Skriptausdruck nur an einer falschen Stelle im Mp3tag an?

DD.20140429.1850.CEST

Ich drück auf einen belibigen Song und geh dann in der Leiste oben auf das Symbol "Tag-Dateiname". Ist was etwa nicht wie man es normalerweise macht?

Hm, ja, jetzt verstehe ich etwas mehr, es geht um die Konstruktion von Dateinamen mit dem Konverter "Tag -Dateiname", das hast du ja auch schon in post #1 gesagt.

In der Tat gelingt es mit diesem Konverter, und mit dem fehlerhaften Skriptcode ...

$if(%ARTIST%,%ARTIST%" - ","")$if(%ALBUM%,%ALBUM%" - ","")$ifgreater(%TRACK%,9,$sub(%TRACK%,/%_%)". ",$if(%TRACK%,"0"$sub(%TRACK%,/%_%)". ",""))%TITLE%

... tatsächlich ein brauchbares Ergebnis zu erzwingen.

Warum funktioniert das mit dem Konverter "Tag -Dateiname" und an anderer Stelle im Mp3tag nicht?
Die Erklärung ist relativ einfach.

Im Dateisystem gelten bestimmte Regeln für die Erzeugung von Dateinamen.
Zum Beispiel sind diese Zeichen verboten: < > ? " : | \ / *

Mp3tag ist deshalb so schlau und passt auf, dass verbotene Zeichen erst gar nicht im Dateisystem ankommen.
Mp3tag bügelt also ohne irgendeine Meldung die möglichen Eingabefehler des Anwenders aus, und entfernt automatisch z. B. die doppelten Anführungszeichen aus dem zu erzeugenden Dateinamen.

Dadurch dass der Konverter "Tag - Dateiname" die Eingabefehler automatisch entfernt, so wird trotzdem die Eingabe-Zeichenkette nicht nachträglich gültig, sondern bleibt fehlerhafter Code.

Ich empfehle deshalb, den Vorschlag aus post #1 für den eigenen Bedarf nicht zu verwenden.

Siehe auch ...
Wieder mal RegEx ....
Gesamtanzahl der Tracks wird nicht richtig augelesen
[F] $validate() broken?

DD.20140429.2022.CEST

ok danke.

Wo gibst du denn immer scripte ein?

Es gibt viele Orte in Mp3tag, wo man einen Skriptausdruck benutzen kann (z. B. Aktionen, Konverter, Export, Tool-Parameter).
Wenn ich einen Skriptausdruck entwickeln und ausprobieren will, dann benutze ich den Konverter "Tag - Tag", weil der eine Vorschau Anzeige hat.

Du kannst diesen Skriptausdruck ausprobieren ...

$if2($trim([%ARTIST%][' - '%ALBUM%][' - '$num(%TRACK%,2)'.'][' '%TITLE%],' -'),$num(%_counter%,2)' - Unknown')

DD.20140430.0730.CEST