romberto
Goto Top

Per Batch 7z Dateien anhand verschiedener Tags in diverse Ordner verschieben

Meine Mp3 Verwaltungswut geht weiter. Nachdem ich die Ordner nun richtig benannt und zu 7z Archiven gepackt habe, möchte ich diese per Batchfile in Verschiedene Unterordner Verschieben.

Die Namensgebung meiner 7zip Dateien ist wie folgt: YYYY-MM-DD - INTERPRET_-_ALBUM_TITEL_GENRE

Nun möchte ich die Dateien anhand der Tags (YYYY-MM-DD) und (GENRE) sortieren und zwar nach folgender Hirarchie:

Variabler Pfad.....\GENRE\YYYY\YYYY-MM\YYYY-MM-DD - INTERPRET_-_ALBUM_TITEL_GENRE.7zip

Die Datei "1962-08-XX - Johnny_Cash_-_The_Sound_of_Johnny Cash_Country.7z" soll also wie folgt kopiert werden:

Variabler Pfad z.b. C:\Country\1962\1962-08\1962-08-XX - Johnny_Cash_-_The_Sound_of_Johnny Cash_Country.7z

Die Batch sollte die diversen Ordner selbst erstellen falls diese nicht schon vorhanden sind.

Ich hoffe mein Gedankenspiel ist auch tatsächlich umsetzbar, für alternativ Lösungswege bin ich natürlich offen.
Wenn das ganze z.B. mit Verzeichnissen einfacher zu lösen wäre, könnte ich die Ordner auch erst nach dem Einpflegen mit 7z packen.

Ich freue mich schon auf euren Input.

Viele grüße

Robert

Content-Key: 185332

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

Printed on: April 16, 2024 at 12:04 o'clock

Member: Hubert.N
Hubert.N May 22, 2012 updated at 17:43:17 (UTC)
Goto Top
Moin

was ich mich bei deiner Aktion aber doch erst mal Frage ist, weshalb du überhaupt mp3-Dateien "komprimiert" irgendwo ablegst. Die Gänsefüßchen deshalb, weil es nun mal nicht möglich ist, ein ohnehin schon gepacktes Format noch in nennenswertem Umfang durch eine Komprimierung weiter zu verkleinern.

Gruß

Hubert
Member: romberto
romberto May 22, 2012 at 17:49:46 (UTC)
Goto Top
Hallo Hubert,

Die Frage ist natürlich gerechtfertigt und du hast auch vollkommen recht damit. Deshalb werden die Dateien auch nur mit mx0 "archiviert". Ich möchte gerne die Dateienanzahl so gering und Übersichtlich wie möglich gestallten, deshalb sind die Dateien gepackt.

Gruß

Robert
Member: bastla
bastla May 22, 2012 updated at 20:01:17 (UTC)
Goto Top
Hallo romberto!

Anhand Deines Beispiels etwa so:
@echo off & setlocal
set "Ordner=D:\Musik"  
set "Basis=C:\"  

pushd "%Basis%"  
for /f "delims=" %%i in ('dir /b/a-d "%Ordner%\*.7z"') do set "Name=%%~ni" & call :ProcessFile "%Ordner%\%%i"  
popd
goto :eof

:ProcessFile
for %%a in (%Name:_= %) do set "Genre=%%a"  
for /f "tokens=1-2 delims=-" %%a in ("%Name%") do set "Jahr=%%a" & set "Monat=%%b"  
set "ZielOrdner=%Genre%\%Jahr%\%Jahr%-%Monat%"  
echo md "%ZielOrdner%" 2>nul  
echo move %1 "%ZielOrdner%\"  
goto :eof
Wegen der beiden "echo" in den Zeilen 14 und 15 werden die Befehle zum Erzeugen der Ordner und zum Verschieben der Datei nur angezeigt, aber nicht ausgeführt - wenn alles vernünftig aussieht, einfach diese beiden "echo" entfernen und den Batch damit "scharf" schalten ...

Noch eine Anmerkung: Da vorweg in den Basispfad (im Beispiel "C:\") gewechselt wird, scheint dieser in der Ausgabe nicht auf - daher würde für Dein Beispiel die Anzeige so aussehen:
md "Country\1962\1962-08"
move "D:\Musik\1962-08-XX - Johnny_Cash_-_The_Sound_of_Johnny Cash_Country.7z" "Country\1962\1962-08\"
Grüße
bastla

[Edit] Variablennamen auf %ZielOrdner% geändert [/Edit]
Mitglied: 60730
60730 May 22, 2012 updated at 19:21:30 (UTC)
Goto Top
Moin,

(ot)

Ich vermute mal, die anzahl derjenigen, die mehr mp3s als meine wenigkeit verwaltet, duerfte an einer hand abzuzaehlen sein.

Von daher kann ich das mit der ordnungswut nicht verstehen.
Meine "ordnungswut" besteht da dann doch eher darin, die id tags wirklich komplett sauber zu halten, lyrics zu pflegen und den ganzen anderen tuenneff, den man heute so macht, damit der mobile oder nicht mobile player die sammlung auch hybsch abspielen kann, eine statistik genutzt usw...

Ob man das nun mit amarok, squeezebox oder eitunes macht, ist ansichtssache, faktum (ala mischael schummelschumi) ist jedoch keiner der genannten verwalter holt sich nen wolf bei 100.0000 titeln.

(/ot)
Member: romberto
romberto May 22, 2012 at 19:41:44 (UTC)
Goto Top
Hallo bastla,

vielen Dank ersteinmal! Das sieht genau nach dem aus, was ich gesucht habe. Die Ordner erstellt er mir auch 1a, wobei ich jetzt erst Merke, dass die Genre Sortierung wohl doch sehr unübersichtlich wird! Werde wohl erstmal den Befehl for %%a in (%Name:_= %) do set "Genre=%%a" rauslassen.

Dennoch scheint er mir die Datei selbst nicht verschieben zu wollen. Habe den Befehl Move auch schon mit xcopy ersetzt -> Datei nicht gefunden, obwohl sie mir im Befehl darüber angezeigt wird.

Viele Grüße

Robert
Member: bastla
bastla May 22, 2012 updated at 19:52:34 (UTC)
Goto Top
Hallo romberto!

Das "echo" am Anfang der Zeile 15 hast Du entfernt?

Wenn Du übrigens "Genre" nicht verwenden willst, musst Du natürlich aus Zeile 13 auch die entsprechende Variable inkl folgendem Backslash entfernen, da ansonsten unabhängig vom angegebenen Basisordner die Ordner immer im Root des aktuellen Laufwerks erstellt werden ...

Grüße
bastla
Member: romberto
romberto May 22, 2012 updated at 20:04:02 (UTC)
Goto Top
Ja, beide Echos sind weg. Mit Echo wird mir auch genau das Angezeigt, was in deinem Beispiel steht.
Allerdings habe ich, wie schon gesagt, die Zeile entfernt + oben set /p vor die Ordner gesetzt, da diese ja Variabel sind:

@echo off & setlocal
set /p Ordner=Ordner: 
set /p Basis=Basis: 

pushd "%Basis%"  
for /f "delims=" %%i in ('dir /b/a "%Ordner%\*.7z"') do set "Name=%%~ni" & call :ProcessFile "%%i"  
popd
goto :eof

:ProcessFile
for /f "tokens=1-2 delims=-" %%a in ("%Name%") do set "Jahr=%%a" & set "Monat=%%b"  
set "Ordner=%Jahr%\%Jahr%-%Monat%"  
md "%Ordner%" 2>nul  
xcopy %1 "%Ordner%\"  
pause

Fehler?

[Edit Biber] Codeformatiert, damit ich dir die Zeilennummer mit dem doppelten %Ordner% nennen kann. [/Edit]
Member: bastla
bastla May 22, 2012 updated at 20:12:11 (UTC)
Goto Top
Hallo romberto!
Fehler?
Abgesehen davon, dass Du keine "Code"-Formatierung verwendest? face-wink
Ja - allerdings meinerseits: ein Variablenname (%Ordner%) für zwei verschiedene Pfade kann nicht gutgehen ... face-sad

Ich ändere das mal oben.

[Edit] Was Du aber nicht hättest ändern sollen, ist die Angabe des Ordners beim Aufruf des Unterprogramms in der (jetzt auch anhand der Nummer identifizierbaren - THX @ Biber) Zeile 6 ... [/Edit]

Grüße
bastla
Member: romberto
romberto May 22, 2012 updated at 20:14:42 (UTC)
Goto Top
Wunderbar! Vielen Dank! Es Funtioniert jetzt 1A!

@timobeil: Sorry, deinen Kommentar habe ich im laufe des Gefechts garnicht mitbekommen. Es geht hier um die Verwaltung meines Backups. Da habe ich es lieber so sortiert und archiviert. Die "Live-Dateien" werden natürlich über einen Verwalter geordnet face-wink

Viele Grüße

Robert
Member: pieh-ejdsch
pieh-ejdsch May 24, 2012 updated at 09:15:22 (UTC)
Goto Top
moin bastla,

auch wenn das Genre jetzt nicht mehr gebraucht wird.

Wenn als letztes das Genre mit einem Unterstrich vom Dateinamen unterscheidbar ist, dann kann der Tausch vom Unterstrich zum Backslash doch in der selben Schleife wie für die Jahr und Tag extraktion genommen werden.

(so Zeile 11 weglassen) und für Zeile 12
for /f "tokens=1-2* delims=-" %%a in ("%Name:_=\%") do set "Jahr=%%a" & set "Monat=%%b" & set "Genre=%%~nc"  

Ja - allerdings meinerseits: ein Variablenname (%Ordner%) für zwei verschiedene Pfade kann nicht gutgehen ...
Das hätte ja ohnehin gar nicht gestört. Die dir Auflistung ist ja schon lange vollzogen worden, bevor die Schleife das erste mal eine Ausgabe produziert. Delayedexpansion ist auch nicht an.

Ps. Roberto, bekommt der Beitrag noch einen Green Button ?

Gruß Phil
Member: bastla
bastla May 24, 2012 at 09:28:00 (UTC)
Goto Top
@ph
Sehr hybsch face-smile - nur zur Sicherheit würde ich allerdings
... set "Genre=%%~nxc"
verwenden ...

Grüße
bastla
Member: pieh-ejdsch
pieh-ejdsch May 24, 2012 at 10:11:02 (UTC)
Goto Top
@bastla,

ja stimmt, die Dateiendung wurde schon beim Weg in die Subroutine Entfernt.

Gruß Phil