# Tag-Dateinamen-Konverter Formatierung

**URL:** https://community.mp3tag.de/t/tag-dateinamen-konverter-formatierung/8086
**Category:** Allgemein
**Created:** [March 15, 2009, 3:49pm UTC](https://community.mp3tag.de/t/tag-dateinamen-konverter-formatierung/8086 "2009-03-15T15:49:12Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![heisubo](https://community.mp3tag.de/user_avatar/community.mp3tag.de/heisubo/32/218_2.png) [@heisubo](https://community.mp3tag.de/u/heisubo)
#### Post date: [March 15, 2009, 3:49pm UTC](https://community.mp3tag.de/t/tag-dateinamen-konverter-formatierung/8086/1 "2009-03-15T15:49:12Z")

</div>

Für den Tag-Dateinamen-Konverter habe ich folgende Formatierung, die wunschgemäß funktioniert:  
Es sollen nur dann %year% und %band% im Verzeichnisnamen erscheinen, wenn die Felder nicht leer sind. Außerdem wird eine Längenbegrenzung bewirkt.  
...[$left(%year%,4) -]$left(%album%,40)[$left( ¤ %band%,40)]$num(%track%,2). %title%

Nun möchte ich dies etwas eleganter haben: Wenn auf %album% **kein** %band% folgt, sollen für %album% 80 Zeichen reserviert werden.

Das müsste doch mit $leql(x,y) [liefert Wahr, wenn x kleiner gleich y ist] oder ähnlichen Bedingungen machbar sein. Ich weiss nicht, wie ich das verschachteln muss. Meine ersten Versuche sind fehlgeschlagen. Hat jemand eine Antwort?

---

<div class="post-metadata">

### Author: ![DetlevD](https://community.mp3tag.de/user_avatar/community.mp3tag.de/detlevd/32/123_2.png) [@DetlevD](https://community.mp3tag.de/u/DetlevD)
#### Post date: [March 15, 2009, 7:24pm UTC](https://community.mp3tag.de/t/tag-dateinamen-konverter-formatierung/8086/2 "2009-03-15T19:24:53Z")

</div>

> [@heisubo](#):
>
> ... Es sollen nur dann %year% und %band% im Verzeichnisnamen erscheinen, wenn die Felder nicht leer sind. Außerdem wird eine Längenbegrenzung bewirkt.  
> ...[$left(%year%,4) -]$left(%album%,40)[$left( ¤ %band%,40)]$num(%track%,2). %title%  
> Nun möchte ich dies etwas eleganter haben: Wenn auf %album% **kein** %band% folgt, sollen für %album% 80 Zeichen reserviert werden. ...

...[$left(%year%,4) -]$left(%album%,**$if($and(%album%,%band%),40,80)**)[$left( ¤ %band%,40)]$num(%track%,2). %title%

DD.20090315.2125.CET

---

<div class="post-metadata">

### Author: ![heisubo](https://community.mp3tag.de/user_avatar/community.mp3tag.de/heisubo/32/218_2.png) [@heisubo](https://community.mp3tag.de/u/heisubo)
#### Post date: [March 18, 2009, 10:00pm UTC](https://community.mp3tag.de/t/tag-dateinamen-konverter-formatierung/8086/3 "2009-03-18T22:00:27Z")

</div>

Vielen, vielen Dank für die Formel. Klappt einwandfrei. Perfekt! Das ganze hat auch den Sinn, die maximale Pfadlänge von 255 Zeichen nicht durch unbedachte Tag-Eintäge zu überschreiten. Ich habe die Zahlen für das Album-Verzeichnis etwas angepasst:

...$left(%album%,$if($and(%album%,%band%),62,102))[$left( ¤ %band%,40)]...

Und mir die Logik durch die folgende Schreibweise etwas verdeutlicht:

$left(%album%, //das Verzeichnis für %album% ...  
$if //wenn

```
  ($and(%album%,%band%) //ergibt wahr, wenn %album% UND %band% Inhalt haben

```

,62,102)) //wenn wahr 62 Zeichen, sonst 102  
[$left( ¤ %band%,40)] //nur wenn %band% Inhalt hat, wird es mit der Länge 40 angefügt.

```
                               //Zusammen sind es immer 102 bis 105 Zeichen

```

Bei dem Versuch den Dateinamen ähnlich zu gestalten bin ich allerdings gescheitert:  
%title%[; mit %lyricist%][; Dir. %conductor%]  
Wenn entweder %lyricist% oder %conductor% vorhanden sind, sollen für %title% nur 38 Zeichen zur Verfügung stehen, sonst 56 Zeichen.  
Kurzform sinngemäß: **_if_** ( (ti **AND** (ly **OR** co)) ) **_then_** 38 Z **_else_** 56 Z

Mein Ansatz sieht so aus:

$left(%title%,

```
$if //wenn
   ($and(%title%,( //einerseits ist wahr, wenn %title% UND
   $or(%lyricist%,%conductor%) //andererseits ist wahr, wenn %ly% ODER %co% Inhalt haben
   ))                                 
38,56)) //dann, sonst

```

[; mit %lyricist%][; Dir. %conductor%]

bzw. in einer Zeile:  
$left(%title%,$if($and(%title%,($or(%lyricist%,%conductor%)))38,56))[; mit %lyricist%][; Dir. %conductor%]

Das Ganze ist wohl syntaxtisch richtig, aber die Bedingung ist offensichtlich falsch, weil **NIE** %title% **ausgegeben** wird. Erkennt jemand meinen Fehler?

---

<div class="post-metadata">

### Author: ![DetlevD](https://community.mp3tag.de/user_avatar/community.mp3tag.de/detlevd/32/123_2.png) [@DetlevD](https://community.mp3tag.de/u/DetlevD)
#### Post date: [March 18, 2009, 11:02pm UTC](https://community.mp3tag.de/t/tag-dateinamen-konverter-formatierung/8086/4 "2009-03-18T23:02:27Z")

</div>

> [@heisubo](#):
>
> Vielen, vielen Dank für die Formel. Klappt einwandfrei. Perfekt! ...

Prima, das höre ich gern!

> [@heisubo](#):
>
> ... Wenn entweder %lyricist% oder %conductor% vorhanden sind, sollen für %title% nur 38 Zeichen zur Verfügung stehen, sonst 56 Zeichen. ...

Ohne mich jetzt zu tief in das Beispiel einzuarbeiten ... zunächst etwas Prinzipielles:  
Du willst ein "entweder-oder" realisieren und das ist etwas anderes als ein einfaches "oder".

Eine "oder"-Relation ist immer dann wahr, wenn einer der beiden Operanden "wahr" ist, unabhängig vom Wert des anderen Operanden, der "wahr" oder "falsch" sein kann, also ein "sowohl-als auch". Dementsprechend kann man die Mp3tag Skript Funktion $OR(a,b) benutzen.

Bei einer "entweder-oder" Relation kann bzw. darf immer nur einer der beiden Operanden "wahr" sein, der andere muss dann "falsch" sein. Man nennt das "Exklusives Oder" (XOR).

In der Mp3tag Skriptsprache gibt es eine vordefinierte Funktion $XOR(a,b) nicht, deshalb muss man sich aus den vorhandenen 'Booleschen Funktionen' eine XOR-Schaltung zusammenbauen:  
$XOR(a,b) = $OR($AND($NOT(a),b),$AND($NOT(b),a))

Für dein Beispiel sieht die Logik so aus:  
$OR($AND($NOT(%lyricist%),%conductor%),$AND($NOT(%conductor%),%lyricist%))

DD.20090319.0100.CET

---

<div class="post-metadata">

### Author: ![ci3nt](https://community.mp3tag.de/letter_avatar_proxy/v4/letter/c/5daacb/32.png) [@ci3nt](https://community.mp3tag.de/u/ci3nt)
#### Post date: [March 19, 2009, 5:09pm UTC](https://community.mp3tag.de/t/tag-dateinamen-konverter-formatierung/8086/5 "2009-03-19T17:09:15Z")

</div>

Hallo,

> [@heisubo](#):
>
> $left(%title%,$if($and(%title%,($or(%lyricist%,%conductor%)))38,56))[; mit %lyricist%][; Dir. %conductor%]

vor der 38 fehlt ein Komma, also

$left(%title%,$if($and(%title%,($or(%lyricist%,%conductor%))) **,** 38,56))[; mit %lyricist%][; Dir. %conductor%]

Könnte das die Ursache sein?

mfG  
gnor

---

<div class="post-metadata">

### Author: ![heisubo](https://community.mp3tag.de/user_avatar/community.mp3tag.de/heisubo/32/218_2.png) [@heisubo](https://community.mp3tag.de/u/heisubo)
#### Post date: [March 20, 2009, 1:53pm UTC](https://community.mp3tag.de/t/tag-dateinamen-konverter-formatierung/8086/6 "2009-03-20T13:53:07Z")

</div>

Vielen Dank für die große Mühe. Ich habe meine Beschreibung wohl nicht ausführlich genug dargestellt. Ich wollte keine Exclusiv-Oder-Funktion. Immerhin hat Dein Beispiel mich dazu gebracht, mit ausführlich mit den Boolesche Funktionen zu beschäftigen. Deine Exclusiv-Oder-Funktion werde ich bestimmt noch woanders benötigen.

Die Lösung war doch ein Syntaxfehler; ich habe an der falschen Stelle gesucht.  
Richtig:  
$left(%title%,$if($and(%title%,($or(%lyricist%,%conductor%))),38,56))[; mit %lyricist%][; Dir. %conductor%]  
Falsch:  
$left(%title%,$if($and(%title%,($or(%lyricist%,%conductor%)))38,56))[; mit %lyricist%][; Dir. %conductor%]  
Hinweis:  
Es fehlte ein Komma!

Ich möchte

1. verhindern, die 255er-Pfadlänge zu überschreiten und
2. den Dateinamen auf 60 Zeichen begrenzen (wg. CD-Brennen)  
Insgesamt sieht das dann so aus: ... $left(%artist%,50)[$left(%year%,4) -]$left(%album%,$if($and(%album%,%band%),62,102))[$left( ¤ %band%,40)]$left($num(%track%,2). $left(%title%,$if($and(%title%,($or(%lyricist%,%conductor%))),38,56))[; mit %lyricist%][; Dir. %conductor%],60)

---

<div class="post-metadata">

### Author: ![heisubo](https://community.mp3tag.de/user_avatar/community.mp3tag.de/heisubo/32/218_2.png) [@heisubo](https://community.mp3tag.de/u/heisubo)
#### Post date: [March 20, 2009, 2:10pm UTC](https://community.mp3tag.de/t/tag-dateinamen-konverter-formatierung/8086/7 "2009-03-20T14:10:50Z")

</div>

> [@gnor](#):
>
> vor der 38 fehlt ein Komma

Du hast Recht. Vielen, vielen Dank für die Formel. Klappt einwandfrei. Perfekt!

---

<div class="post-metadata">

### Author: ![anon40879270](https://community.mp3tag.de/letter_avatar_proxy/v4/letter/a/8797f3/32.png) [@anon40879270](https://community.mp3tag.de/u/anon40879270)
#### Post date: [March 24, 2009, 1:37pm UTC](https://community.mp3tag.de/t/tag-dateinamen-konverter-formatierung/8086/8 "2009-03-24T13:37:09Z")

</div>

> [@heisubo](#):
>
> verhindern, die 255er-Pfadlänge zu überschreiten

Weiss jemand eine andere Möglichkeit bei WinXP die maximale Pfadlänge einzuhalten?
