mit _DIRECTORY Überordner umbenennen (zb bei 2xCD)


#1

wie kann man eigentlich mit einer Aktion die Ordner umbenennen, die eine Ebene über dem Ordner sind der die Tracks enthält?

mfg
s_PLASH


Ordner eines Doppelalbums umbenennen
Rename a parent directory for multi-disc albums
Beliebige Anzahl an Ordnern mit komplettem Inhalt verschieben?
Ordner eines Doppelalbums umbenennen
Renaming
Using original info
Aktion für Sampler mit unterordner CD1,CD2, Cover
export csv with foldername and total time
#2

$replace(%_folderpath%,\%_parent_directory%\%_directory%,)<b>== NEW ==\%_directory%

Bei == NEW == kommt der gewünschte Ordnername rein.

Es sollte aber \%_parent_directory%\%_directory%\ nur einmal in %_folderpath% vorkommen, sonst geht es schief.


#3

... sollte nicht schief gehen, wenn "Anker" geworfen ... zum Beispiel ...

$replace(%_folderpath%'$$$',''%_parent_directory%''%_directory%'$$$',)''== NEW ==''%_directory%

Mit

== NEW ==

gleich

'mein Ordnername'

oder

%TAGFELD%

DD.20100911.1342.CEST
Edit.DD.20100921.1940.CEST


#4

ich bekomme das leider nicht hin :frowning:
vll wurde mein problem nicht verstanden. das doppelalbum liegt wie folgt vor:

album
L CD 1
L CD 2

nun möchte ich, dass nicht die 2 unterordner CD 1 und CD 2 mit _DIRECTORY umbenannt werden, sondern der ordner album

wenn ich $replace(%_folderpath%'$$$',\%_parent_directory%\%_directory%'$$$',)'<!--coloro:#FF0000-->%album%'%_directory%
verwende, entsteht ein neuer ordner mit dem namen %album% der CD 1 und CD 2 enthät. wobei der alte ordner album, jetzt ohne inhalt, bestehen bleibt.

mfg
s_PLASH

EDIT: mit 'album', also mit diesen kleinen strichen vor -und nach dem gewünschten namen, geht es jetzt! :w00t:
$replace(%_folderpath%'$$$',\%_parent_directory%\%_directory%'$$$',)'<!--coloro:#FF0000-->'%album%''%_directory%

der alte ordner bleibt aber stehen (er ist leer) und muss von hand extragelöscht werden. geht das auch automatisch?


#5

man muss schon wirklich diese kleinen striche vor und nach %TAGFELD% setzen, sonst heißt der neue ordner name %TAGFELD% (im meinem fall %album%)

kann jemand sagen, wie der alte ordner automatisch (also mit derselben Aktion) gelöscht werden kann?

mfg
s_PLASH


#6

s_PLASH, bitte beachte den Unterschied zwischen Literalen und Variablen.

Alle die Zeichen, die man in der Mp3tag Skriptsprache "entwerten" will ("roher Text"), müssen in einfache Apostrophe eingeschlossen werden. Ansonsten können Zeichen in einfache Apostrophe eingeschlossen werden, brauchen es aber nicht unbedingt (die Syntax ist dabei verwirrend lose).

Wenn man einen Editor benutzt, der den Skripttext gemäß der Syntax der Mp3tag Skriptsprache einfärben kann, dann kann man leicht erkennen, was ein Tag-Feld Inhalt ist oder was eine Funktion ist oder was ein Text ist. Weil ich einen solchen Editor benutze, der nur dann den Skripttext richtig kolorieren kann, wenn er eine vernünftige reguläre Syntax angeboten bekommt, habe ich es mir zur Gewohnheit gemacht, normalen Text immer mit einfachen Apostrophen zu umgeben.

Also ist 'mein Ordnername' eine einfache Zeichenkette, die genau das enthält, was da geschrieben steht, und das wird verwendet.

Wenn ein Wort mit Prozentzeichen eingeschlossen ist, dann bedeutet das in der Mp3tag Skriptsprache, dass es sich dabei um eine technische Variable oder ein Tag-Feld handelt und es soll der aktuelle Inhalt verwendet werden.
Deshalb bedeutet %TAGFELD% die Anweisung an die Skriptsprache, den Inhalt des Behälters TAGFELD zu verwenden.

Schauen wir uns noch einmal die Skriptzeile an:
$replace(%_folderpath%'$$$',''%_parent_directory%''%_directory%'$$$',)''== NEW ==''%_directory%

Durch die Kolorierung sind die einzelnen Bestandteile deutlich zu unterscheiden.
Der Teil == NEW == bezeichnet die Stelle, die noch mit einem bestimmten Wert ausgefüllt werden muss (so hat Dano es visualisiert, um es dir einfach zu machen).

Dieser Wert kann sein:

  • eine Zeichenkette, z. B. 'Beatles'
  • der Inhalt eines Tag-Feldes, z. B. %ARTIST%

Der Teil == NEW == kann also unterschiedlich ausgefüllt werden und dabei folgende Skriptzeilen ergeben:

$replace(%_folderpath%'$$$',''%_parent_directory%''%_directory%'$$$',)'''Beatles'''%_directory%

$replace(%_folderpath%'$$$',''%_parent_directory%''%_directory%'$$$',)''%ARTIST%''%_directory%

Wenn zwei Zeichenketten, die in einfache Apostrophe eingeschlossen sind, nebeneinander stehen, dann können die sich berührenden beiden "inneren" Apostrophe entfernt werden.

$replace(%_folderpath%'$$$',''%_parent_directory%''%_directory%'$$$',)'\Beatles'%_directory%

Eine Zeichenkette beginnt mit einem einfachen Apostroph und endet mit einem einfachen Apostroph.
Stehen zwei einfache Apostrophe nebeneinander (außerhalb einer Zeichenkette), so wird damit das einfache Apostroph Zeichen selbst erzeugt.

'Hier ist der Anfang'' und hier das Ende.'
==>
'Hier ist der Anfang und hier das Ende.'
==>
Hier ist der Anfang und hier das Ende.

'''Hier'''' ist der Anfang und hier das ''''Ende''''.'
==>
'Hier' ist der Anfang und hier das 'Ende'.

DD.20100923.0302.CEST


Probleme mit Tag-Feld formatieren
#7

ok, DetlevD
danke für deinen ausführlichen Hinweis! aber so weit, dass es an der stelle klappt, war ich doch schon. die nötigen apostrophe vor -und nach %TAGFELD% in deinem post, hatte ich wohl übersehen.

wie kann ich nun dafür sorgen, dass ein zusätzlicher ordner, der den alten ordnernamen trägt und nach der Aktion leer ist, vermieden -oder automatisch entfern wird?

geht das überhaupt?

mfg
s_PLASH


#8

am basten ein kleines Batch/Powershellskript am Ende laufen lassen, was leere Ordner rekursiv löscht:)


#9

danke! leider kann ich daraus mangels weitergehender programmierkenntnisse keine konkrete lösung für mein problem ableiten. bis jetzt sieht der befehl ja so aus:

$replace(%_folderpath%'$$$',''%_parent_directory%''%_directory%'$$$',)''== NEW ==''%_directory%

wie müsste man den jetzt fortsetzen bzw. abschließen?

mfg
s_PLASH


#10

Ich möchte nur 'mal anmerken, wenn man die drei Dollarzeichen durch ein (fast beliebiges) Zeichen ersetzt, wird der Formatstring um 4 Zeichen kürzer, z. B.
$replace(%_folderpath%'$',''%_parent_directory%''%_directory%'$',)''== NEW ==''%_directory%
... oder ...
$replace(%_folderpath%'@',''%_parent_directory%''%_directory%'@',)''== NEW ==''%_directory%

User rk78 meinte mit seinem Bastelvorschlag die Abschlussarbeit am Ende der Arbeitssitzung:
Das automatische Entfernen aller leeren Ordner in einem Ordnerbaum mit Hilfe eines .bat oder .cmd oder .ps oder .vbs oder anderen Skripts.

Daran hatte ich als schnelle Selbsthilfe auch schon gedacht.
Aber ich denke, dass das (rekursive) Entfernen eines leeren Ordners (oder mehrerer), nach dem "Verschieben" mit Hilfe des Pseudo Tag-Felds "_DIRECTORY", die dazugehörige Aufgabe von Mp3tag ist.

DD.20100929.1937.CEST


#11

Sehe ich auch so, wobei sich das natürlich als anwählbare Option in den Einstellungen am besten machen würde.

mfG
gnor


#12

Für ganz schnell mal eben leere Ordner entfernen unterhalb des aktuellen Wurzelordners reicht eigentlich diese Kommandozeile mit Statusanzeige:
FOR /F "tokens=" %P IN ('DIR /S/B/A:D/-P^|SORT /R') DO RD "%P"
... oder leise ohne Ausgabe:
FOR /F "tokens=" %P IN ('DIR /S/B/A:D/-P^|SORT /R') DO RD "%P" >NUL 2>&1

DD.20100930.0838.CEST


#13

hm, weiß nicht wohin mir dieser Zeile..

und sorry, dass ich diesen alten Thread ausgrabe
aber vielleicht hat sich inzwischen etwas geändert bzgl. der verbleibenden leeren Ordnern (die, mit dem alten Ordnernamen stehen bleiben)?

Ich meine wurde vielleicht inzwischen eine bequemere Möglichkeit für mein Problem als alte Ordner nachtränglich löschen zu müssen?


#14

Huhu, fünf Monate später ...?
Na gut, es verlangt ja niemand von dir, die Dinge auszuprobieren, von denen du nicht weißt wie sie anzuwenden sind. Das ist auch gut so, dann machst du auch nichts kaputt.

Ob sich von Mp3tag her etwas verändert hat, dazu kann ich nichts sagen, weil in der Zwischenzeit diese Fragestellung sich nicht mehr als Problem gestellt hat.

Wenn du mit der DOS Kommandozeile nicht vertraut bist (siehe oben: FOR ... ), dann kannst du vielleicht mit einem anderen kleinen Werkzeug umgehen, das visuell mehr bietet (ein Helferchen von PC-Welt), siehe beiliegende zip-Datei.

pcwEmptyFolder.zip (2.51 KB)

DD.20110223.0855..CET

pcwEmptyFolder.zip (2.51 KB)


#15

Hallo zusammen,

ich möchte noch einmal auf das Problem von s_PLASH zurückkommen, da ich trotz intensiver Suche und ausprobieren auch nicht mehr weiter weiß.

Meine Albenstruktur soll so aussehen (bzw. ist in Teilen schon so):

Genre\Artist\Year - Album\CD..\Track - Title.mp3

wobei nicht immer Mehrfach-CDs vorkommen und die Files direkt unter dem Album liegen.
Unterhalb des Ordners "Year - Album" liegen auch meine Cover-Bilder, Tracklisten, m3u etc.

Bei Anwendung des Strings mit dem _parent_dirctory und Einlesen ab der Genre-Ebene werden die Files der Mehrfach-CDs mit Ordnern richtig umbenannt, im alten (eingelesenen) Album-Ordner verbleiben aber noch meine Cover :frowning:
Bei den Alben ohne Unter-CD-Ordner kommt es aber zum GAU und aus dem Artist wird dann der Albumname.
Für ein Bearbeiten in einem Rutsch ist die Variante also anscheinend nicht geeignet.

Als einzige Lösung sehe ich zur Zeit eine Neu-Nummerierung der Files mit 101, ... 201,... für verschiedene CDs und Wegfall des CD-Directories. Die überflüssigen leeren CD.. Ordner könnte man dann als Null-Byte Ordner mit dem Tool löschen.

Hat jemand eine andere Idee?


#16

Die Variante alle Tracks eines Doppelalbums in einen Ordner zu stecken hatte ich vorher auch. Sie ist logisch und mit mp3tag ein leichtes.

Jedoch bietet das Aufteilen in Unterordner CD1 und CD2 die Möglichkeit der genauen Bezeichnung des Mediums. zB CD2 - Rarities, CD2 - Bonus, CD2 - (Remixes). In foobar stehen sie dann auch so in der Playlist, zB Disc 2: Bonus CD

Außerdem ist es übersichtlicher, besonders bei mehr als 3 CDs, jeweils Unterordner zu haben. Es ist zwar rein subjektiv aber ich finde es besser maximal 30 Tracks einer CD auf einen Blick zu sehen als 50, 70 oder noch mehr, des ganzen Albums oder CD Box.


#17

Ich frage jetzt mal was ganz anderes:
Wie soll MP3tag denn feststellen, dass es mehrere CDs zu einem Album gibt?
Vorteilhaft wäre dann doch ein gefülltes Tag %discnumber%, nach dem man filtern könnte.
Wie wäre es deshalb erst mal mit der Kontrolle, ob %discnumber% einen Inhalt hat und der Pfad das mit CDx enthält?
Dann %discnumber% füllen überall da, wo noch geschehen, aber ein CDx im Pfad vorhanden ist.
Dann wieder filtern nach allen Dateien, wo zwar discnumber gefüllt ist, nicht aber CD im Pfadnamen - die müssten dann ja wohl mit Konverter "Tag - Dateiname" erst mal angelegt werden.
Und dann alle rausfiltern, wo CD und discnumber vorhanden sind, um die umzubenennen.
Und dann alle anderen, also wo es kein CD und kein discnumber gibt und die umbenennen.

Ich meine, dass man die Möglichkeiten nutzen sollte, die man beherrscht. Und wenn weder DOS-Skript-Kenntnisse noch die Syntax in voller Schönheit beherrscht wird, ist der umständliche aber verständliche Weg vielleicht der Bessere.


#18

ich mach das auch immer mit 101, 102, ... 201, 202, ... in einem Ordner

um einen Ordner in den Überordner zu verschieben und dabei alle Dateien mitnehmen, ohne dass ein leerer Ordner zurückbleibt:

Aktion: Tag-Feld formatieren
Feld: _DIRECTORY
Formatstring: .\

beachtet dazu evtl. folgenden Bug: /t/11449/1


#19

soll gar nicht! ich ziehe die alben einzeln ins mp3tag und trage discnumber ein, bevor der Hauptordner des Albums umbenannt werden soll.

ich will doch nur, dass der Überordner (Doppelalbum mit darin enthaltenen Unterordnern CD1 und CD2) umbenannt wird und dabei

  1. kein leerer Ordner mit altem Ordnernamen zurückbleibt und
  2. keine Inhalte wie bilder oder andere ordner zurückbleiben

mit zb

_DIRECTORY

CD%discnumber%


funktioniert das umbenennen eines ordners ganz prima. ich verstehe nicht, warum mp3tag nicht auch die nächsthöhere ordnerebene so leicht packt. ich meine es könnte alles so einfach sein.. :rolleyes: