Ordner in einem Rutsch umbenennen, ohne Datainahmen und Tags anzutasten

Hallo,

ich habe meine gesamte Musiksammlung in folgender Ordnerstruktur abgelegt:
Artist\Year Album\Tracknumber. Title

Ich würde gerne lediglich das Jahr in Klammern setzen, also:
Artist[Year] Album\Tracknumber. Title

Wie mache ich das in einem Rutsch, so dass wirklich nur
die Klammer um das Jahr gesetzt wird?

Vielen Dank und Grüße,
Christoph

Vielleicht geht es mit dieser Aktion:

Aktion #1
Aktionstyp 5: Tagfeld formatieren
Feld: _DIRECTORY
Formatstring: $regexp(%_directory%,'^(\d+)÷(.+?)$','[$1]÷$2')

Hinweis: Ein Sonderzeichen ÷ durch ein Leerzeichen ersetzen.

DD.20090628.1925.CEST

Vielen Dank für die Antwort, werde ich mal in Ruhe ausprobieren!

Gruß,
Christoph

Super - funktioniert! Besten Dank!
War doch so gemeint, dass die ÷ einfach durch Leerzeichen ersetzt werden, oder?
Ich habe jedenfalls jetzt für runde Klammern
$regexp(%_directory%,'^(\d+) (.+?)$','($1) $2')
verwendet.
Meinst Du, ich kann es wagen, das Script über meine 1300 Alben laufen zu lassen :wink:?

Gruß,
Christoph

Hallo nochmal,

ich habe mal testweise mein Musikarchiv auf eine Festplatte kopiert und dann das Script drüberlaufengelassen. Dabei ist mir (bisher) ein Fehler aufgefallen, nämlich ein nicht korrekt umbenannter Ordner (siehe Screenshot). Irgendwelche Ideen?

Vielen Dank und Gruß,
Christoph

Ups, ganz schön peinlicher Vertipper im Topic ...
Ich meine natürlich "Namen" und "Datei" :wink: ...

Zuerst:
Ich mag es nicht, wenn mir beim Betrachten von Informationen ein splash popup Fenster die Sicht versperrt, und das passiert z. B. beim Anschauen deiner Bilder. Kannst du nicht einfach deine Bilder mit deinem Beitrag zusammen hochladen, dann gibt es einen sauberen Link aus einer vertrauten Quelle, den ich dann bestimmt anschauen kann.

Dann zur Frage:

Du wirst es nicht glauben, aber genau darauf habe ich gewartet. Es war klar, irgendein Fehler musste auftreten, that's life!
Ohne jetzt gesehen zu haben, was du mir zeigen wolltest, wird es sicher ein paar Fehlermöglichkeiten geben:

  1. Der Ordner kann nicht umbenannt werden, weil eine darin befindliche Datei im Zugriff eines anderen Programms ist (Player, Virenscanner, was auch immer)
  2. Der Ordner ist schreibgeschützt.
  3. Hinter der Nummer am Anfang des Ordnernamens folgt kein normales Leerzeichen, sondern ein geschütztes Leerzeichen (Alt+0160).
  4. ...

Die Fehlerquelle Nr. 3 kann man übergehen, wenn der Ausdruck so geändert wird:
$regexp(%_directory%,'^(\d+)\s+(.+?)$','[$1] $2')

Trotzdem ist es besser, wenn in allen Ordnernamen grundsätzlich jedes mögliche "whitespace" Zeichen durch ein normales Leerzeichen ersetzt wird.
$regexp(%_directory%,\s,' ')

DD.20090629.1757.CEST
Edit
DD.20090630.0922.CEST
Edit
DD.20090630.1701.CEST

Hallo Detlev,

ich empfehle Firefox mit eingeschaltetem Popup-Blocker und Adblock Plus. Ich verwende diese Kombination, weil ich Popups auch nicht mag :wink:. Hat allerdings den Nachteil, dass mir dadurch auch nicht aufgefallen ist, dass bei Directupload ein Fenster aufpoppt - sorry! Ich hänge die Datei direkt nochmal an.
Die Ordner sind übrigens nicht schreibgeschützt; kann es sein, dass der Fehler damit zusammenhängt, dass beide Alben mit "On" beginnen? Wie auch immer - Du hast mir bereits sehr geholfen - vielen Dank!

Grüße aus Langenfeld,
Christoph


Nein, ich glaube nicht.

Siehe oben geänderte/r Post #7.

DD.20090629.0924.CEST

Ich habe jetzt mal meine gesamte Sammlung durchlaufen lassen.
Nach wie vor werden einige Klammern nicht gesetzt, und ich verwende definitiv keine geschützten Leerzeichen. Finde ich ziemlich unproblematisch; ich bin dankbar, dass es überhauft eine Möglichkeit gibt, die Bearbeitung automatisch vornehmen zu lassen. Aber vielleicht interessiert Dich einfach die Rückmeldung. Es handelt sich wieder um Alben mit ähnlichen Namen, z.B.

(2001) No More Shall We Part
2001 No More Shall We Part - Bonus Disc

(1994) Spheres
1994 Spheres II

(1993) On
1993 On Remixes

Seltsamerweise tritt der Fehler bei Doppel-CDs, die nach "Album CD1", "Album CD2" benannt wurden nicht auf.

Viele Grüße,
Christoph

Probier es mal ohne das Fragezeichen
$regexp(%_directory%,'^(\d+) (.+?)$','($1) $2')

also
$regexp(%_directory%,'^(\d+) (.+)$','($1) $2')

Rückmeldung ist immer gut - und oft gibt es etwas Neues zu erfahren.
Ich habe das erste Beispiel 'mal eben ausprobiert und sehe keinen Fehler, siehe Bild.


DD.20090703.0013.CEST


[spekulationsmodus]
Durch das Fragezeichen wird der Teil "nicht gierig", und sucht nach dem minimalen match, der bei beiden Ordnern seiner Beispiele identisch ist.
Ohne ? wird nach dem längsten match gesucht, was in diesem Fall erwünscht sein dürfte.
[/spekulationsmodus]

Mir kam noch in den Sinn, dass eventuell eine Komplikation mit kurzen DOS-Namen bestehen könnte, aber das scheint nicht gegeben zu sein, siehe wie folgend:

2009-07-03 00:22 2001NO~1 2001 No More Shall We Part
2009-07-03 00:23 2001NO~2 2001 No More Shall We Part - Bonus Disc

2009-07-03 00:22 (2001)~1 (2001) No More Shall We Part
2009-07-03 00:23 2001NO~2 2001 No More Shall We Part - Bonus Disc

2009-07-03 00:22 (2001)~1 (2001) No More Shall We Part
2009-07-03 00:23 (2001)~2 (2001) No More Shall We Part - Bonus Disc

Aber trotzdem solltest du das 'mal prüfen.

DD.20090703.0030.CEST

Ob "(.+)$" oder "(.+?)$" - beides referenziert doch die Zeichenkette mit dem Anker am Ende, oder?

DD.20090703.0033.CEST

Dann habe ich wohl falsch spekuliert.

Aber hast du mal versucht 2 solche Ordner wie von Muelli aufgeführt in einem Rutsch umzubenennen?
Ich komme zu identischen Ergebnissen. Es wird nur ein Ordner umbenannt.
Entferne ich ? oder $ werden beide Ordner umbenannt.

Nein, ich habe das Muelli-Szenario noch nicht nachgebaut, sondern nur "Bausteinweise" getestet.
Hmm, 'mal sehen ...

Aktion1
Aktionstyp 5: Tagfeld formatieren
Feld: _DIRECTORY
Formatstring: $regexp(%_directory%,'^(\d+)\s+(.+?)$','[$1]÷$2')
Hinweis: Ein Sonderzeichen ÷ durch ein Leerzeichen ersetzen.

Aktion2
Aktionstyp 5: Tagfeld formatieren
Feld: _DIRECTORY
Formatstring: $regexp(%_directory%,'^(\d+)\s+(.+?)$','($1)÷$2')
Hinweis: Ein Sonderzeichen ÷ durch ein Leerzeichen ersetzen.

Beide Aktionen geprüft.

Mit Aktion1:
2009-07-03 00:55 2001~2 [2001] No More Shall We Part
2009-07-03 00:55 2001~1 [2001] No More Shall We Part - Bonus Disc

Mit Aktion2:
2009-07-03 00:58 (2001)~2 (2001) No More Shall We Part
2009-07-03 00:58 (2001)~1 (2001) No More Shall We Part - Bonus Disc

jeweils ausgegangen von:
2009-07-03 01:02 2001NO~1 2001 No More Shall We Part
2009-07-03 01:02 2001NO~2 2001 No More Shall We Part - Bonus Disc
(Datum ist vom Rückgängigmachen.)

Ich sehe kein Problem.

Hmm, da wäre noch zu erwähnen ...
Ordner werden nicht umbenannt, wenn sie leer sind, das heißt, wenn Mp3tag darin befindliche Musikdateien nicht erkennen kann, oder auch wenn die Dateien mit einem Schreibschutz versehen sind.

DD.20090703.0132.CEST

Edit:
Heute morgen sieht die Situation etwas anders aus (es waren wohl die Heinzelmännchen am Werk).

Ein Ordner wird umbenannt, auch wenn sich darin nur eine 0 Byte große dummy mp3 Datei befindet.

Wenn eine Datei schreibgechützt ist, dann erscheint ein Dialog mit der Frage "Soll die schreibgeschützte Datei "dummy.mp3" verschoben werden?
Wenn mit "Ja" beantwortet, dann wird der Ordner umbenannt.
Wenn mit "Nein" beantwortet, dann wird der Ordner nicht umbenannt.

Ich sehe heute morgen kein Problem beim Umbenennen von Ordnern, es scheint richtig zu funktionieren.
DD.20090703.0924.CEST

Wenn ich "2001 No More Shall We Part - Bonus Disc" in ein separates Verzeichnis kopiere, werden die Klammern auch korrekt gesetzt. Nur wenn der zweiter Ordner "2001 No More Shall We Part" vorhanden ist, tritt der Fehler auf.

Gruß,
Christoph

Jetzt wird es langsam ulkig.
Zu Klärung des Sachverhalts siehe Bild.
Welcher Fall ist bei dir gegeben?

DD.20090703.1015.CEST


Die von dir zuletzt genannten Formatstrings funktionieren hier auch.
Das Problem bestand nur mit dem von dir weiter oben zuerst genannten Formatstring.
Bei diesem ist mir noch etwas interessantes aufgefallen: er funtioniert auch wenn man die ' weglässt.

Also statt
$regexp(%_directory%,'^(\d+) (.+?)$','($1) $2')
dann
$regexp(%_directory%,^(\d+) (.+?)$,($1) $2)

Welche Funktion haben die ' denn?