In einer Aktion die Größe eines Verzeichnis ermitteln?

Hallo,

ich hoffe ich habe die Suchfunktion ausführlich genutzt?, bin aber leider nicht fündig geworden.

Für das Taggen meiner FLAC - Dateien nutze ich MP3TAG. Ich habe schon vieles automatisiert, Text-, Bild- Dateien einlesen etc. pp. Desweiteren nutze ich einige Custom-Tags.
Diese Tags nutze ich um über die Exportoption eine Text-Datei zu erzeugen. Was mir allerdings noch fehlt ist, wie kann ich die Größe eines Unterverzeichnisses auslesen. Beispiel:

Artist\Album - year\artwork\

In dem Verzeichnis "artwork" liegen diverse Dateien. Hierzu möchte ich gerne die Verzeichnisgröße ermitteln, in ein Tag-Feld schreiben und anschließend beim Export diesen Wert weiterverarbeiten.

Meine Frage an die Runde, gibt es eine Lösung für mein Problem?
Ich hoffe ich habe es verständlich formuliert?

Besten Dank
Ratjev

Ich habe mir jetzt zwar noch keine genaueren Gedanken gemacht, aber im Prinzip müsstest Du mit der Exportfunktion einen Loop pro Ordner die Größe der jeweiigen Dateien addieren können.
z.B. Pseudo-Tagfeld: %_filesize_bytes%

Aber wie Du das mit dem Tagfeld meinst, verstehe ich nicht.
Ein Tagfeld ist doch in 1 Audiodatei eingebettet und die Bilddateien betreffen doch sicher mehrere Musikdateien, z.B. ein Album. Willst Du in jede Audio-Datei eines Albums dden Gesamtspeicherplatz der externen Cover-Dateien schreiben?

Nur für den Zweck eines Reports ist dieser Zwischenschritt sicherlich nicht nötig, denn man könnte ja innerhalb des Reports auch entsprechende Variablen definieren, die diesen Wert aufnehmen.

Die einzelne Datei weiß ja recht wenig über den Ordner, in dem sie ist und wer sich da noch so tummelt. Aber Mp3tag betrachtet eigentlich immer nur eine Datei gleichzeitig.
Aktionen vergleichen übrigens nie 2 Dateien miteinander, so dass die Bewertung "ist im selben Ordner" nicht zu erbringen ist.

Du kannst die Größe einer einzelnen Datei über z.B. das Informationsfeld %_file_size_kb% ermitteln und während eines Exports diesen Wert aufaddieren.
Aber das sagt nur, wie viele Bytes in den behandelten Dateien sind.
Bei dir hört sich das so an, als würde aber gerade ein Ordner interessant, der nun aber auch gar keine normalerweise von MP3tag bearbeitete Dateien, nämlich Bilder, enthält. Die werden in der Ausgangskonfiguration gar nicht berücksichtigt, die müsstest du mit Gewalt dazu lesen lassen.

Die Schreiberei von Dateisysteminformationen in Tag-Felder erscheint mir problematisch, da sich die einmal erfasste Zahl je nach Bearbeitungsstand wieder ändern kann. Und so einen Fix-Wert aktuell zu halten, verursacht vermutlich mehr Aufwand als Nutzen.

Vielleicht findest du ein Kommandozeilen-Tool, das dir die Ordnergröße in eine Textdatei schreibt. Dann kannst du per Import den Wert in ein benutzerdefiniertes Feld schreiben.

Vielen Dank für die promte Antwort. Wenn es sich über einen Loop regeln ließe, klar kann mir den Tag sparen, der sollte nur den Wert für die weitere Verarbeitung aufnehmen.
Ich habe allerdings noch keine Idee wie ich das per Loop bewerkstellige?

Sorry, aber da brauche ich kein Tool für, rechter Mausklick im Explorer -> Eigenschaften … dann hab ich auch den Wert (er muss nicht Bit genau sein) aufgerundet auf ein volles MB reicht mir.
Aber ich habe/hatte nun mal die fixe Idee das in meinem Exportscript mit zu verarbeiten.
Wie ich schon oben beschrieben habe, wenn das per Loop geht, kein Ding … aber wie gesagt … momentan keinen blassen Schimmer wie …

Wie kriegst du denn den explorer dazu, dir die Ordnergröße in eine weiterverarbeitbare Form zu übertragen?

$filename(csv,utf-16)
$loop(%_path%)
$loop(%_filename%)
$puts(fs,$add($get(fs),%_file_size%))
$loopend()
$loopend()
$get(fs)

fs ist die Nutzervariable, in der die Größe der Dateien aufaddiert wird.
Schreib den Report so, dass alles in 1 Zeile steht.

Und noch ein Hinweis: es werden nur die Dateien zusammengezählt, die von MP3tag geladen werden. Alle anderen nicht.

Besten Dank!

Natürlich kann ich dem Explorer nicht sagen "schreib mal die Daten da rein", da merke ich mir den Wert und füge in anschließend in die bereits generierte Textdatei ein. Ist Ok :wink:

Funktioniert soweit, aber wie du schon geschrieben hast "... es werden nur die Dateien zusammengezählt, die von MP3tag geladen werden. Alle anderen nicht. ..." Btw mit der Funktion "%_total_size%" erreiche ich das gleiche.
Ich benötige jedoch die Verzeichnisgröße des Folders "artwork".
Nochmals besten Dank an alle! :slight_smile: ... ich werde weiter den Wert händisch eintragen :wink:

Hier einmal ein Ausschnitt aus meiner Export Datei:
$filename(txt,utf-8)
%artist% - %album% (%year%/%RERELEASE%)
Vinyl rip in 24-bit/96 khz | %NUMBER_LP% LP(s) %DISCOGS_FORMAT% %LP_WEIGHT%
Artwork ?? MB| DR-Analysis | %_total_size% | FF
%genre%, %STYLE% | Original %DISCOGS_COUNTRY% Pressing | %LABEL% - %DISCOGS_CATALOG% 
...
An der Stelle mit den 2 Fragezeichen hätte ich gerne den ermittelten Wert!

Du kannst bei Extras>Optionen die Dateierweiterungen festlegen, die von MP3tag geladen werden sollen ... da könntest du auch . eintragen. Bearbeiten lassen sich die Nicht-Audio-Dateien dann nicht, aber sie werden mit gezeigt.

Eine Frage hab ich noch (so schnell geb ich nicht auf :wink: ). Nach (gefühlten 3-Tagen) habe ich ausprobiert den Pfad irgendwie festzumachen, also:

%_path%\artwork - im Klartext
X:\VINYL\9694\Rock\Peter Gabriel\SO - [1984]\artwork\

… das gelingt mir nicht, leider.
Irgendwelche Inspirationen für mich, vielleicht?

Besten Dank noch einmal.

Du kannst im Report nur die Dateien anzeigen und auswerten lassen, die von MP3tag auch gezeigt werden. Bzw. der Report wird nur für die markierten/sichtbaren Dateien erstellt.
Wenn also die Dateien aus dem ARTWORK Verzeichnis nicht in Mp3tag gezeigt werden, werden die beim Report auch nicht berücksichtigt. Da nützt es auch nicht, den Pfad explizit anzugeben.
Du müsstest die Liste der eingelesenen Dateien in
Extras>Optionen>Tags
erweitern.

… das hatte ich probiert (habe ich vergessen zu erwähnen, sorry), klappt trotzdem nicht.
Ich glaube, eh ich noch weitere Stunden damit verbringe :wink: , ich werde meine alte Methode weiter nutzen; geht schneller.

Und trotzdem, nochmals vielen Dank für die tolle Unterstützung. Ausserdem habe ich vergessen mich bei allen zu bedanken die hier schon, auch für mich, wunderbare Lösungen anzubieten hatten. Ich bleibe am Ball.

Wie äußert sich denn das "nicht klappen"?
Kriegst du die Dateien nicht zu sehen?
Oder kriegst du keine Informationen zu den Dateien?

… doch ich sehe die Dateien, ich bekomme auch einen Wert angezeigt, jedoch sind alle FLAC's dabei, also nicht die gefühlten 30 MB für das artwork-Verzeichnis, sondern die ca. 950 MB für das komplette Verzeichnis (inkl. FLAC).

Dann stimmt was mit den $loop() Anweisungen nicht. Entweder gibt es nicht genug oder die rotieren um das falsche Kriterium. Und die Rücksetzung der Summenvariablen ist nicht an der richtigen Stelle.
Es müsste möglich sein, für jedes Verzeichnis das Zählen neu zu starten.
Vielleicht ist statt $loop(%_path%) ein $loop(%_directory%) besser.

ich bin mir nicht sicher ob ich das nicht schon probiert habe, werde ich heute Abend aber testen; muss Geldverdienen :wink: und bin an meinem Arbeitsplatz und habe keinen Zugriff auf mein System.
Ich werde es testen und melde mich dann.
Nochmals besten Dank im Vorraus.

Schau Dir - wenn noch nicht geschehen - zur Inspiration mal dano's Skripte an.
Dort wird auch die Größe eines Ordners ermittelt.
dano export configs

... hab ich mir gerade einmal angeschaut ... bin leider nicht fündig geworden, oder ich habe es übersehen, oder blöd :wink: ?

... hab ich ausprobiert ... immer noch ohne Erfolg.
Ich gebe auf, bleibe bei meiner alten Methode.
Besten Dank noch einmal an alle. :slight_smile:

Hallo Zusammen,

so ganz gebe ich noch nicht auf.
Da meine Programmierkenntnisse nicht unbedingt die besten sind habe ich mal eine, für euch wahrscheinlich einfach, Frage wie ich $put, $puts, $get richtig einsetze; aus der Hilfe werde ich nicht schlau (vielleicht zu blöd? :wink: ).
Mein Hintergedanke ist eine Variable zu erzeugen die den Wert "\artwork" aufnimmt und daraus eine zweite die sich aus der festen Variable "%_directory%" + "\artwork" zusammensetzt. Also z.B.:

"%_directory%" = c:\temp
neue Variabale "ART" = "\artwork"
neue %_directory% & %ART% = c:\temp\artwork

und anschließend mit $put, $puts und/oder $get das oben beschriebene Verzeichnis zu generieren um daraus widerrum die Verzeichnisgröße in einer Export *.mte" zu integrieren.
Also Grundsätzliches für mich erst einmal das Verstehen der Funktionen $put, $puts und/oder $get !

Besten Dank an alle

Das was du schilderst hat nur wenig mit $put usw. zu tun. Denn Strings kannst du ja beliebig zusammensetzen.
$put(x,y) weist der Variablen x den Wert y zu und gibt dann x aus.
$puts() macht im Prinzip dasselbe, nur eben "silent" (=putS) - denn für das bloße Zusammenzählen willst vermutlich nicht alle Zwischenergebnisse ausgegeben haben.

Die Abtrennung zwischen den Verzeichnissen kriegst du über entsprechend geschachtelte Schleifen hin:
Eine über den gesamten Pfadnamen,
Eine über den Verzeichnisnamen
(könnte ich mir vorstellen)
so dass eine Rumbastelei mit ART nicht notwendig sein sollte.

Ach ja: ich verstehe immer noch nicht Sinn und Zweck der Übung. Denn wenn jetzt in dem Verzeichnis die Export-Datei landet (keine mte - das sind die Export-Anweisungen), dann ändert sich doch die Menge der in einem Verzeichnis gespeicherten Bytes schon wieder.