Fehler in Aktionen mit "_DIRECTORY" und "_FILENAME"

Hallo,

es kann sein dass mein beobachtetes Verhalten mit dem hier beschriebenen einhergeht:
/t/10046/1

Ich habe mir eine eigene Aktion geschrieben die mir:

  1. das Verzeichnis umbenennen soll (Tag Feld formatieren) in
    Feld: _DIRECTORY
    Formatstring: %artist%\%album%

  2. das Album Cover in das Verzeichnis exportieren soll, mit namen folder.jpg

  3. fuer jede mp3 Datei einen eigenen Folder pro CD anlegt(Tag Feld formatieren) in
    Feld: _FILENAME
    Formatstring: $if(%discnumber%,CD$left(%discnumber%,1),)\%_filename%

4 in die CDx Unterverzeichnise jeweils das Album Cover exportieren soll

Das Ergebnis ist aber (bei einem Album mit 2 CDs) eine Fehlermeldung "Cannot move CD1: The destination Folder is the same as the source folder"

  • das original mp3 Verzeichnis enthaelt einen Ordner mit CD1, allen mp3 drin und einem folder.jpg
  • es existiert parallel zum original Verzeichnis die Struktur mit %artist%\%album% und einem einem folder.jpg drin

erwartet haette ich:

  • das original mp3 Verzeichnis wurde umbenannt in %artist%\%album% daring liegt ein folder.jpg
  • %artist%\%album% Verzeichnis enthaelt 2 Unterordner CD1, CD2 mit den jeweiligen mp3 drin und jeweils einem folder.jpg

selbst wenn ich Schritt 1+2 und Schritt 3+4 in getrennten Aktionen ausfuehre funktioniert es nicht.

Erst wenn ich Schritt 1+2 ausfuehre, anschliessend das neue Verzeichnis via z.B. Drag and Drop neu einlese uns anschliessend Schritt 3+4 ausfuehre bekomme ich mein gewuenschtes Ergebnis

Eventuell kommen gleich mehrere Probleme zusammen. Du musst beachten, wo die aktuelle Dateiliste, die in Mp3tag angezeigt wird, ihre Basis hat, also wo der aktuelle Arbeitsordner ist.
Oft beziehen sich die Dinge, die man tun will, auf diesen Arbeitsordner, und nicht auf den Ort, wo die Datei gespeichert ist.

Zum Punkt 3 habe ich einen Vorschlag, den du 'mal ausprobieren kannst, vielleicht bringt er Hilfe.

Feld: _FILENAME
Formatstring: $replace($replace(%_PATH%,%_WORKINGPATH%,),%_FILENAME_EXT%,)\CD1\%_FILENAME%

Das ist erst einmal zur Probe ohne Abfrage betreffend Discnumber.
Wird im aktuellen Ordner der Datei ein Unterordner CD1 angelegt und die Datei dorthin verschoben?

DD.20100405.1534.CEST

Hi Detlev,

ich habe jetzt mal meinen Schritt 3 durch deinen Vorschlag ersetzt, das Ergebnis ist jetzt sehr strange, ein Bild sagt mehr als viele Worte




wobei das folder.jpg in einigen unterverzeichnissen liegt, aber nicht in allen.



Sorry, aber die Bilder helfen nicht viel, weil ich den Ausgangszustand nicht kenne, und weil auf dem ersten Bild gleichzeitig mehrere unterschiedliche Arbeitsergebnisse angezeigt werden.

Wo ist das Arbeitsverzeichnis von Mp3tag beim Beginn des Arbeitsprozesses?
(siehe Titelleiste des Mp3tag Fensters)

Ich vermute, das erste Problem liegt darin, dass gleich im ersten Schritt der Ordner, in dem die erste "angefasste" Datei liegt, an einen anderen Ort verschoben wird, vermutlich relativ zum aktuellen Arbeitsordner von Mp3tag.

Das Umbenennen von _DIRECTORY bedeutet Verschieben des gesamten Ordners.
(Vielleicht deshalb die Fehlermeldung "The destination Folder is the same as the source folder"?)

Weil im Formatstring ("%artist%\%album%") nur relative Pfadangaben gemacht worden sind, geschieht die Verschiebung des gesamten Inhalts des Ordners, in dem die angefasste Datei liegt, in einen Ordner mit dem Namen des Albums, der in einem Ordner mit dem Namen des Artisten liegt, der vermutlich im aktuellen Arbeitsordner liegt, der wiederum nicht zwangsweise der Heimatordner der zuvor angefassten Datei sein muss.

Mein Vorschlag für Schritt 3 sollte eigentlich helfen, diese Relativität "herauszurechnen", also den "Differenzpfad" zu bestimmen zwischen dem aktuellem Arbeitsordner und dem Ordner der angefasten Datei. Im oberen Teil des ersten Bildes sieht es so aus, dass das Prrinzip funktioniert.

DD.20100406.1037.CEST

Hi Detlev,

Das ist ja das Komische. Das ist genau das Ergebnis der im 2ten Bild zu sehenden Aktion.
Hierbei lagen die ausgangs mp3 alle flach in einem Verzeichnis \Temp\test\OneRepublic

Aber okay, ich glaube ich habe verstanden was Du mir sagen willst, mein Arbeitsordner von mp3tag wechselt.

Aber egal wie ich es drehe und wende, ich glaube dass es sich hier um einen Fehler handelt (oder zumindest verstehe ich alles nicht mehr :slight_smile:), wenn ich mal das extrahieren der Cover weglasse:
im ersten Schritt bennen ich den start Folder um (das anfangs working directory) in artist\album
d.h. fuer den naechsten Aktionsschritt wuerde ich erwarten (mag auch falsch sein), dass das neue Verzeichnis mein working directory ist. Ausserdem gehe ich in dem Schritt auf jedes File, d.h. hier muss das neue Verzeichnis beruecksichtigt werden, es sei denn die Werte/Variablen werden nur zu Beginn ausgewertet und belegt.

Wenn ich die Aktionen einzeln durchfuehre,
Nur Verzeichnisumbennen
Nur CD Subverzeichnisse anlegen

funktioniert alles, bis auf die besagte Fehlermeldung beim Subverzeichnis anlegen

Sobald ich aber beide Schritte in einer Aktionen zusammenlege kommen ganz komische Ergebnisse raus.

Jetzt weiß ich es selbst bald nicht mehr, was richtig und was falsch ist, ob der Arbeitsordner von Mp3tag so großen Einfluss auf die Operationen hat oder nicht usw.
Also ist die Zeit gekommen für ein systematisches Beispiel.

  1. Beispiel

Es gibt diesen Ordnerbaum mit den Dateien:
"O:\TEST\T1\T2\T3\T4\41.mp3"
"O:\TEST\T1\T2\T3\T4\42.mp3"

Der Mp3tag Arbeitsordner ist:
"O:\TEST\T1"

Wir fassen die erste Datei an, und bestimmen mit _DIRECTORY einen neuen Heimatordner für diese (und alle weiteren Dateien im selben Ordner) z. B. "A\B":
Tagfeld formatieren: _DIRECTORY
Formatstring: A\B\

Das Ergebnis ist:
"O:\TEST\T1\T2\T3\A\B\41.mp3"
"O:\TEST\T1\T2\T3\A\B\42.mp3"

So weit so gut, der Mp3tag Arbeitsordner hat keinen schlechten Einfluss auf die Operation genommen. Relative Änderungen mit _DIRECTORY beziehen sich also auf den Heimatordner der angefassten Datei.
Es reicht, eine einzige Datei anzufassen!
Wenn mehrere Dateien selektiert sind, dann überspringt Mp3tag alle weiteren Dateien, denn das Ergebnis ist ja schon nach der ersten Datei vorhanden.

Jetzt wollen wir im Ordner O:\TEST\T1\T2\T3\A\B\ zwei neue Ordner mit den Namen CD1 und CD2 anlegen und verschieben gleichzeitig die zugehörigen Dateien (die ungeraden Nummern nach CD1 und die geraden Nummern nach CD2):

Tagfeld formatieren: _FILENAME
Formatstring: $if($odd(%_FILENAME%),'CD1','CD2')%_FILENAME%

Dabei würde ein Fehler passieren:
"O:\TEST\T1\T2\T3\A\B\41.mp3" ->
"O:\TEST\T1\CD1\41.mp3"
Hier kommt nun der Arbeitsordner von Mp3tag ins Spiel.

Entweder man benutzt jetzt einen absoluten Pfad mit _FILENAME:
Tagfeld formatieren: _FILENAME
Formatstring: 'O:\TEST\T1\T2\T3\A\B'$if($odd(%_FILENAME%),'CD1','CD2')%_FILENAME%

... oder man baut sich einen "relativen Differenzpfad" zusammen, der sich auf den Arbeitsordner von Mp3tag bezieht:
Tagfeld formatieren: _FILENAME
Formatstring: $replace($replace(%_PATH%,%_WORKINGPATH%,),%_FILENAME_EXT%,)$if($odd(%_FILENAME%),'CD1','CD2')%_FILENAME%

Anmerkung:

An anderen Stellen in Mp3tag (Tools, Export) kann man die Systemvariable %_FOLDERPATH_REL% ("relativer Differenzpfad") benutzen, nur hier nicht!

Der Vorgang soll sein:
"O:\TEST\T1\T2\T3\A\B\41.mp3" ->
"O:\TEST\T1\T2\T3\A\B\CD1\41.mp3"
und
"O:\TEST\T1\T2\T3\A\B\42.mp3" ->
"O:\TEST\T1\T2\T3\A\B\CD2\42.mp3"

Wenn man jede Datei einzeln anfasst, also die Verschiebeaktion zweimal ausführt, dann erhalten wir das vorstehende Ergebnis, also zwei neue Unterordner CD1 und CD2, die jeweils die zugehörige Datei enthalten.

Wenn man mit einem "frisch gestarteten Mp3tag"(!) die Verschiebeaktion einmal gegen beide selektierten Dateien ausführt, dann erscheint die positive Meldung "2 von 2 Dateien wurden umbenannt".
"O:\TEST\T1\T2\T3\A\B\CD1\41.mp3"
"O:\TEST\T1\T2\T3\A\B\CD2\42.mp3"

Es sieht so aus, als ob alles gut funktioniert.

  1. Beispiel

Nun das Beispiel, das zum Fehler führt:
"Fehler beim Verschieben der Datei oder des Ordners."
"CD1 kann nicht verschoben werden: Der Ziel und der Quellordner sind identisch."

Es gibt diesen Ordnerbaum mit den Dateien:
"O:\TEST\T1\T2\T3\T4\41.mp3"
"O:\TEST\T1\T2\T3\T4\42.mp3"

Mp3tag starten.
Der Mp3tag Arbeitsordner ist:
"O:\TEST\T1"

Wir selektieren beide Dateien, und bestimmen mit _DIRECTORY einen neuen Heimatordner für die Dateien z. B. "A\B":
Tagfeld formatieren: _DIRECTORY
Formatstring: A\B\

Das Ergebnis ist:
"O:\TEST\T1\T2\T3\A\B\41.mp3"
"O:\TEST\T1\T2\T3\A\B\42.mp3"

Wir selektieren beide Dateien, und wollen mit _FILENAME und Formatstring die beiden Dateien in die Unterordner CD1 und CD2 verteilen:
Tagfeld formatieren: _FILENAME
Formatstring: $replace($replace(%_PATH%,%_WORKINGPATH%,),%_FILENAME_EXT%,)$if($odd(%_FILENAME%),'CD1','CD2')%_FILENAME%

Diese Aktion wird mit der Fehlermeldung quittiert.
"Fehler beim Verschieben der Datei oder des Ordners."
"CD1 kann nicht verschoben werden: Der Ziel und der Quellordner sind identisch."

Weiter escheint die Quittungsmeldung "Es wurden 1 von 2 Dateien umbenannt."

Das Ergebnis ist:
"O:\TEST\T1\T2\T3\A\B\CD1\41.mp3"
"O:\TEST\T1\T2\T3\A\B\CD1\CD2\42.mp3"

Mp3tag scheint sich nach der Verschiebeaktion mit _DIRECTORY nicht mehr darüber "bewusst zu sein", dass sich durch die Verschiebeaktion mit _DIRECTORY der Pfad verändert hat zu den Dateien.

Die beiden Dateien sind nicht korrekt lokalisiert und die anschließende Verschiebeaktion mit _FILENAME läuft in einen Fehler.

Soweit erst einmal mit den Beispielen.

Übrigens erzeugt Mp3tag beim Rückgängigmachen der Verschiebeaktionen immer einen Abbruch
mit Dump.

Andre ... wie du schon im Post#1 sagtest ...

... das sehe ich jetzt auch so ... also muss Florian eingreifen.

DD.20100407.0812.CEST
Edit.DD.20100417.1932.CEST