bn2023
Goto Top

Coverbilder in Überverzeichnisse kopieren

Hallo,

ich habe eine Musiksammlung mit mehr als 2.000 Titeln.
Nun habe ich bei der App meines neuen Verstärkers festgestellt, dass in der App keine Coverbilder in den Überverzeichnissen angezeigt werden, sondern nur in den jeweiligen Verzeichnissen darunter.
Daher würde ich nun gerne je ein Coverbild in den jeweiligen Überordner kopieren, was händisch natürlich viel zu viel Arbeit ist.

Ich beschreibe hier mal kurz meine Verzeichnis-Struktur:

MUSIK > A - E > Künstler > Album

Bei der zweiten Ebene gibt es folgende weitere Verzeichnisse:
F - J
K - O
P - T
U - Z

Übertragen werden soll also jeweils die Datei "cover.jpg" aus der Ebene "Album" in die jeweilige Ebene darüber.
Natürlich steht dort nicht jeweils "Album", sondern der jeweilige Name des Albums.

Hier mal ein Beispiel:

MUSIK > A - E > AC-DC > Back in Black > cover.jpg

Gibt es eine Möglichkeit - z.B. mit einer Batch-Datei - die Coverdateien in allen Verzeichnissen in die nächsthöhere Ebene zu kopieren?

Danke und Grüße,
BN

Content-ID: 61774648107

Url: https://administrator.de/contentid/61774648107

Ausgedruckt am: 18.11.2024 um 23:11 Uhr

13034433319
Lösung 13034433319 14.06.2024 aktualisiert um 18:03:09 Uhr
Goto Top
Powershell
Get-ChildItem -Path 'D:\Musik\*\*\*\cover.jpg' -File | copy-item -destination {"$($_.Directory.Parent.FullName)\$($_.Directory.Name).jpg"} -verbose  
Batch (ins Root des Musikordners legen und starten)
@echo off &setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /b /s /a-d "%~dp0cover.jpg"') do (  
  set "folder=%%~dpa"  
  for /f "delims=" %%b in ("!folder:~0,-1!") do set "parent=%%~dpb" & set "album=%%~nxb.jpg"  
  copy "%%a" "!parent!!album!"  
)

Danke und Grüße,
Bitte und Gruß
BN2023
BN2023 14.06.2024 aktualisiert um 20:05:31 Uhr
Goto Top
WOW, danke Dir für die super schnelle Lösung.

Hätte mal eine Frage zur Batchdatei...
In Zeile 2 steht ja nur "a-d".
Welche Codezeile bewirkt denn, dass auch die anderen Ordner berücksichtigt werden (also F - J, K - O, P - T, und U - Z)?

Und... die Batch soll direkt im Verzeichnis "MUSIK" liegen?

Grüße,
BN
13034433319
13034433319 14.06.2024 aktualisiert um 20:41:51 Uhr
Goto Top
Zitat von @BN2023:

Hätte mal eine Frage zur Batchdatei...
In Zeile 2 steht ja nur "a-d".
Das "a-d" hat nichts mit den Ordnernamen zu tun! Das ist eine Anweisung an den Dir-Befehl
keine Ordner sondern nur Dateien zu suchen (nur die cover.jpg's).
Kannst du hier nachlesen https://learn.microsoft.com/de-de/windows-server/administration/windows- ...

Und... die Batch soll direkt im Verzeichnis "MUSIK" liegen?
Ja. Kann man aber auch feste Pfade hinterlegen wenn du das lieber willst, je nach Gusto ...
BN2023
BN2023 14.06.2024 um 22:01:51 Uhr
Goto Top
OK und danke für die weitere Erläuterung.
Habe ich verstanden... face-wink

Grüße,
BN
BN2023
BN2023 15.06.2024 aktualisiert um 11:01:54 Uhr
Goto Top
Hallo nochmal,

bevor ich gleich mit der Datei starte, habe ich noch zwei Fragen:

Und zwar kommt es ja vor, dass sich im Verzeichnis eines Künstlers gleich mehrere Alben befinden.
Da aber später im Überverzeichnis "Künstler" nur immer 1 Coverbild angezeigt werden kann, wäre es am besten, wenn immer nur das Coverbild "cover.jpg" des ERSTEN Albums im Verzeichnis kopiert würde.

Läßt sich der Code dementsprechend anpassen?

Und... kann man das Ganze auch so erweitern, dass er "cover.png" oder "folder.jpg" nimmt, falls es kein "cover.jpg" gibt? Ich habe gesehen, dass es manchmal auch diese Bezeichnungen gibt.

Danke und Gruß,
BN
13034433319
13034433319 15.06.2024 aktualisiert um 11:17:07 Uhr
Goto Top
Machen kann man alles, lass dir doch bitte aber erst mal etwas Zeit bis du wirklich alles bedacht hast, ich fange hier ungerne 20 mal von vorne an ...🤐
BN2023
BN2023 15.06.2024 um 11:31:20 Uhr
Goto Top
sorry, das kann ich verstehen.
Ich bin jetzt soweit, dass ich anfangen kann mit dem Kopiervorgang.
Es wären lediglich noch diese beiden Änderungen, die gemacht werden müßten.

Wäre super, wenn Du mir da nochmal helfen könntest face-wink

Grüße,
BN
13034433319
Lösung 13034433319 15.06.2024 aktualisiert um 11:53:50 Uhr
Goto Top
@echo off
set "folder=D:\Musik"  
powershell -EP Bypass -C "Get-ChildItem -Path '%folder%\*\*' -Directory | foreach {Get-ChildItem $_.Fullname -Recurse -include 'folder.jpg','cover.jpg' | select -First 1 | copy-item -destination {join-path $_.Directory.Parent.FullName 'cover.jpg'} -verbose}"  
Demo

Tschüssikowski 🖖
BN2023
BN2023 15.06.2024 um 11:57:43 Uhr
Goto Top
super und vielen Dank face-wink
Werde es gleich ausführen.

Grüße,
BN
BN2023
BN2023 15.06.2024 aktualisiert um 12:17:55 Uhr
Goto Top
Hmmm... ich muss doch nochmal schreiben.

Habe jetzt über die Windows Power Shell eine ".psi"-Datei erstellt mit dem folgenden Inhalt:

@echo off
set "folder=H"    
powershell -EP Bypass -C "Get-ChildItem -Path '%folder%\*\*' -Directory | foreach {Get-ChildItem $_.Fullname -Recurse -include 'folder.jpg','cover.jpg' | select -First 1 | copy-item -destination {join-path $_.Directory.Parent.FullName 'cover.jpg'} -verbose}"  

Die ext. Festplatte ist jetzt am Laptop angeschlossen und hat dort den Laufwerksbuchstaben "H".
Der Name des Laufwerkes ist "MUSIK". Ich habe im Code jedoch nur "H" eingetragen, da man direkt nach dem Öffnen von Laufwerk "H" die Über-Verzeichnisse sieht (A-E, F-J, K-O, P-T, U-Z).

Die .psi-Datei liegt auf meinem Desktop.
Nach dem Start öffnete sie sich für 2 Sekunden und schloss sich dann.
Aber passiert ist nix face-sad

Habe die Datei jetzt auch mal direkt ins Root der ext. FP gelegt. Aber da passiert genau das Gleiche...

Habe ich was falsch gemacht?
Ich kenne mich auch mit der Powershell nicht aus. Daher hatte ich ja auch eher Batch bevorzugt.
Aber funktionieren sollte es ja sicher auch per Powershell.

Kannst Du nochmal weiterhelfen bitte?

Grüße,
BN
13034433319
Lösung 13034433319 15.06.2024 aktualisiert um 12:23:03 Uhr
Goto Top
Habe jetzt über die Windows Power Shell eine ".psi"-Datei erstellt mit dem folgenden Inhalt
Och nee, das ist doch ne Batch ...., siehst du doch an dem @echo off....
Und "psi" liest du auf deinem Manometer 🤪nicht in PS.

Wenn du's Plain PowerShell haben willst dann so

Get-ChildItem -Path 'D:\Musik\*\*' -Directory | foreach {Get-ChildItem $_.Fullname -Recurse -include 'folder.jpg','cover.jpg' | select -First 1 | copy-item -destination {join-path $_.Directory.Parent.FullName 'cover.jpg'} -verbose}  
Rootpfad natürlich anpassen.
BN2023
BN2023 15.06.2024 um 12:18:43 Uhr
Goto Top
oh shitt.
Ich hatte das Wort "Powershell" im Code gelesen und daher gedacht, dass es eine PS Datei ist.

Sorry face-wink

Grüße,
BN
BN2023
BN2023 15.06.2024 um 12:22:38 Uhr
Goto Top
...allerdings bricht es auch als Batchdatei sofort nach dem Öffnen ab.
Datei liegt im Root... also direkt auf Laufwerk "H".

Grüße,
BN
13034433319
13034433319 15.06.2024 aktualisiert um 12:26:02 Uhr
Goto Top
Fehlt ja auch der Doppelpunkt im Pfad ...

"Musik" Ordner nach deiner Beschreibung nicht vergessen
set "folder=H:\Musik"  

Oh man schwere Geburt mit dir...

Wenigstens Code mal lesen und verstehen wäre als erstes angesagt.
Copy n Paste bringt dich nicht weiter.
BN2023
BN2023 15.06.2024 aktualisiert um 12:33:50 Uhr
Goto Top
ja, das mit dem Doppelpunkt hatte ich auch gesehen und schon korrigiert.
Läuft jetzt und ich checke gerade stichprobenartig, ob es in allen Verzeichnissen geklappt hat.

Danke....

UPDATE:
Hat alles super funktioniert.

Danke nochmal für Deine Mühe.... face-wink

Grüße,
BN