Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

MP3-Dateien gemäss ihres Namens in bestehende Ordner verteilen, in denen der Interpret des zu verschiebenden Songs vorhanden ist

Frage Entwicklung Batch & Shell

Mitglied: RazorJack

RazorJack (Level 1) - Jetzt verbinden

23.12.2009 um 21:54 Uhr, 6577 Aufrufe, 9 Kommentare, 1 Danke

Hallo Leute
ich bin neu hier.
Auf der Suche im Google bin ich mehrere Male auf euer offensichtlich tolles Forum gestossen.
Leider habe ich in den bereits vorhandenen Beiträgen noch keine Antwort für meinen "Fall" gefunden.
Andere kompetente Lösungen konnte ich leider nicht gemäss meinen Vorgaben anpassen.

Mein Problem ist, dass ich etwa 2'200 MP3 in einem Download-Ordner habe, die ich aber möglichst automatisiert verteilen, also in andere, bereits bestehende Musik-Ordner einordnen will.

Mein bestehendes Musik-Archiv sieht in seiner Ordnerstruktur etwa wie folgt aus:
(Sorry für die Formatierung - die Ordner rechts sind jeweils Unterordner vom darüberliegenden, mehr links stehenden Ordner)
M:\MEDIA
........ |_PHOTOS
........ |_MOVIES
........ |_MUSIC
.................. |_MP3
........................|_ALTERNATIVE
........................|_ROCK
........................|_OLDIES
........................|_R'n'B / SOUL
........................|_REGGAE
........................|_HOUSE
........................|_ usw.

In diesen diversen "Genre-Ordnern", die ich mir vor langer Zeit angelegt habe (keine Genre-ID3-Tags), befinden sich die bereits vorhandenen und entsprechend der Musikrichtung abgelegten Musikdateien (ohne Unterordner "ALBUM X123").

Nun möchte ich die heruntergeladenen und säuberlich nach Schema [Interpret - Titel.mp3] beschrifteten MP3-Musikstücke vom Download-Ordner in die oben dargestellten Genre-Ordner verschieben.

D:\DOWNLOADS
................|_NEUE MP3
............................|_ToCheck
..........................................|_INTERPRET1 - SONG1.mp3
..........................................|_INTERPRET1 - SONG2.mp3
..........................................|_INTERPRET2 - SONG1.mp3
..........................................|_INTERPRET2 - SONG2.mp3
..........................................|_INTERPRET2 - SONG3.mp3
..........................................|_INTERPRET3 - SONG1.mp3
..........................................|_INTERPRET4 - SONG1.mp3
..........................................|_INTERPRET4 - SONG2.mp3
..........................................|_usw.

Dabei soll jeweils geprüft werden, ob der entsprechende Interpret, des aus dem Download-Ordner zu verschiebenden Songs, bereits in einem Genre Ordner vorkommt und diese Datei vom Download-Ordner in genau jenen Genre-Ordner verschoben werden.

Es kann im Musikarchiv vorkommen, dass der selbe Interpret in verschiedenen Genre-Ordnern, also mehr als 1x vorkommt, da ich das bisher alles manuell verschoben habe und dabei darauf geachtet habe, in welchen Musikstil-Ordner das Stück wohl besser passt.

Genial wäre es dann natürlich schon, wenn man in solchen Fällen eine Auswahlmöglichkeit hätte oder zumindest in einem Logfile die potenziellen Genre-Ordner benannt werden und man sich diese Interpreten danach noch manuell vornehmen kann. Ich könnt aber auch damit leben, wenn die neuen MP3 jeweils in den ersten gefundenen Genre-Ordner verschoben werden. Meist ist es vom selben Interpreten ja auch die ähnliche Stilrichtung.

So, bissen viel auf einmal, aber ich hoffe ich konnte exakt erklären, was mich plagt und hoffe so auf einen Crack, der mir weiterhilft.

Dankeschön schon mal im Voraus, eine schöne besinnliche Weihnachtszeit und einen Ordentlichen Rutsch ins neue Jahr

Prosit! (...don't drink and drive!)
RazorJack
Mitglied: Snowman25
23.12.2009 um 23:06 Uhr
Hallo RazorJack,

dein problem ist ein wenig komplexer als das, was man sonst so antrifft. Sollte aber durchaus per Batch möglich sein...
Ich muss mal schauen, ob ich Zeit dafür finde.

Greetz Snow
Bitte warten ..
Mitglied: bastla
23.12.2009 um 23:15 Uhr
Hallo RazorJack und willkommen im Forum, hallo Snowman25!

Zum Testen die "Billigvariante" nach dem Motto "ab in den ersten passenden Ordner":
01.
@echo off & setlocal 
02.
set "Quelle=D:\DOWNLOAD\NEUE MP3\ToCheck" 
03.
set "Ziel=M:\MEDIA\MUSIC\MP3" 
04.
 
05.
set "Log=D:\Log.txt" 
06.
set "Liste=%temp%\MP3Liste.txt" 
07.
dir "%Ziel%\*.mp3" /s /b>%Liste% 
08.
 
09.
if exist "%Log%" del "%Log%" 
10.
for %%i in ("%Quelle%\*.mp3") do set "DName=%%~ni" & call :ProcessFile "%%i" 
11.
notepad "%Log%" 
12.
goto :eof 
13.
 
14.
:ProcessFile 
15.
for /f "delims=§" %%a in ("%DName: - =§%") do set "Interpret=%%a" 
16.
set "Ordner=" 
17.
for /f "delims=" %%a in ('findstr /i /c:"\\%Interpret% - " %Liste% 2^>nul') do if not defined Ordner set "Ordner=%%~dpa" 
18.
if not defined Ordner >>"%Log%" echo %~nx1: Noch kein Titel von %Interpret% vorhanden! & goto :eof 
19.
echo move %1 "%Ordner%" 
20.
>>"%Log%" echo %~nx1 --^> %Ordner:~,-1% 
21.
goto :eof
Das "echo" vor dem "move" sorgt dafür, dass noch nicht wirklich verschoben, sondern der entsprechende Befehl nur angezeigt wird. Für jede Datei wird außerdem ein Eintrag in eine Logdatei erstellt und Letztere am Ende mit dem Editor geöffnet.

Grüße
bastla
Bitte warten ..
Mitglied: rubberman
24.12.2009 um 01:58 Uhr
Hallo Zusammen.

@bastla
Wieder was gelernt. Das:
01.
for /f "delims=§" %%a in ("%DName: - =§%") do set "Interpret=%%a"
hätte ich ungleich komplizierter gelöst, da ich nicht damit gerechnet hätte, dass die Ersetzung zur Laufzeit der Zeile bereits wirksam ist.

@RazorJack
Sinvoll ist meiner Meinung nach, wenn du das ganze in zwei Stepps durchführst.
- Im ersten Step erstellst du eine leicht zu editierende Vorschrift, wie mit jeder Datei vorzugehen ist. Falls dir Excel zur Verfügung steht, würde sich eine *.csv Datei anbieten. Hier sind Semikolons als Separatoren gesetzt und Excel ist standardmäßig mit diesem Dateityp verknüpft. Somit lassen sich Zuordnungen im Vorfeld noch ändern, bzw. für noch nicht vorhandene Interpreten hinzufügen.
- Im zweiten Step wird diese Datei wieder ausgelesen und das Verschieben der Dateien vorgenommen.

bastla's Batchscript lässt sich relativ einfach dahingehend erweitern.

Vorsicht ist bei der Verwendung von Batches für solche Vorhaben immer geboten, wenn du dir nicht sicher bist, ob Sonderzeichen der Kommandozeile (zB. & oder %) im Dateinamen vorkommen. Diese führen zu Fehlern in der Abarbeitung.

Grüße
rubberman
Bitte warten ..
Mitglied: RazorJack
24.12.2009 um 10:42 Uhr
Hi bastla, hallo zusammen

Danke für Deinen Lösungsvorschlag und eure Beiträge. Das Script ist schon etwa fünf levels zu hoch für mich, aber ich verstehs zumindest im Ansatz
Ich hab die Pfadangaben entsprechend meiner "Testumgebung" angepasst und hab's gleich ausprobiert:
01.
@echo off & setlocal 
02.
set "Quelle=T:\DOWNLOADS\ToCheck" 
03.
set "Ziel=M:\Music\MP3\Other\TEST" 
04.
 
05.
set "Log=T:\DOWNLOADS\ToCheck\Log.txt" 
06.
set "Liste=%temp%\MP3Liste.txt" 
07.
dir "%Ziel%\*.mp3" /s /b>%Liste% 
08.
 
09.
if exist "%Log%" del "%Log%" 
10.
for %%i in ("%Quelle%\*.mp3") do set "DName=%%~ni" & call :ProcessFile "%%i" 
11.
notepad "%Log%" 
12.
goto :eof 
13.
 
14.
:ProcessFile 
15.
for /f "delims=§" %%a in ("%DName: - =§%") do set "Interpret=%%a" 
16.
set "Ordner=" 
17.
for /f "delims=" %%a in ('findstr /i /c:"\\%Interpret% - " %Liste% 2^>nul') do if not defined Ordner set "Ordner=%%~dpa" 
18.
if not defined Ordner >>"%Log%" echo %~nx1: Noch kein Titel von %Interpret% vorhanden! & goto :eof 
19.
echo move %1 "%Ordner%" 
20.
>>"%Log%" echo %~nx1 --^> %Ordner:~,-1% 
21.
goto :eof
Das Script läuft ohne Fehlermeldung durch, führt die move -Aktionen aber wegen des "echo" vor dem "move" in der 3.-untersten Zeile, wie im Lösungsvorschlag erwähnt, nicht durch, sondern blendet zuletzt nur das Logfile ein.
Nach Entfernen des "echo" lief das Script inkl. des Verschiebens der Dateien fehlerfrei durch.

Das generierte Logfile:
Escolate - Happy Hour.mp3 --> M:\Music\MP3\Other\TEST\Jazz 
Fredde Le Grand - Kann Ingen Sorg For Mig Bjorn Borg.mp3 --> M:\Music\MP3\Other\TEST\Jazz 
Freddy Fader Meets Locana - Bom Bom.mp3 --> M:\Music\MP3\Other\TEST\Jazz 
Grooves - Writing On The Wall.mp3 --> M:\Music\MP3\Other\TEST\Pop 
Hypersnap  
Jupiter - Hon E Norsk Och Har Brunt Har.mp3 --> M:\Music\MP3\Other\TEST\Pop 
Kate Ryan - Voyage Voyage.mp3 --> M:\Music\MP3\Other\TEST\Old School 
Sex Appeal - Sensuality.mp3 --> M:\Music\MP3\Other\TEST\Old School 
Tasty - You And Me.mp3 --> M:\Music\MP3\Other\TEST\R'n'B 
Ti-Mo - Put Your Hands Up For New York.mp3 --> M:\Music\MP3\Other\TEST\R'n'B**
In der 5.Zeile des Logfiles (hier visuell in der 7. wegen der Zeilenumbrüche) wäre eigentlich "Hypersnap & Engl - Bass Tonight.mp3" korrekt gewesen. Wie rubberman bereits erwähnt hat, können Sonderzeichen wie "%" oder "&" nicht korrekt erkannt werden. Das ist ein Problem. Ich habe mehrere hundert Songs, in denen das Zeichen "&" vorkommt.
Na gut, wenn es sich nicht anders lösen lässt, würde ich halt vorgängig alle "&" jeweils durch "And" oder "Feat." ersetzen. Mit "Magic File Renamer" ist das in wenigen Minuten gemacht, allerdings wär's mir schon lieber, ich könnt die Namen aus ästethischen Gründen so belassen.

PS: Was ist eigentlich wenn ich im Quellverzeichnis mehrere Ordner habe? Wie kann ich das Script dahingehend abändern, dass vom root aus alle *.mp3 im Hauptquellenordner und Unterordner der Quelle berücksichtigt werden? Oder muss ich das für jeden Unterordner einmal ausführen?

Recht herzlichen Dank nochmals. Dieses Forum rockt!
Bin gespannt auf eure Antworten.

Cheers,
RazorJack

[Edit Biber] Codetags ergänzt. [/Edit]
Bitte warten ..
Mitglied: Biber
24.12.2009 um 11:48 Uhr
[OT]
Moin RazorJack,

willkommen im Forum.
An der Lösungsverfeinerung will ich mich gar nicht beteiligen dieses Mal.

Aber an dieser Stelle und weil in diesem Thread alle mitlesen, die ich erreichen will

Danke dir, RazorJack für die vorbildliche Frage- und Titelformulierung und die klare Beschreibung der Anforderung.
So sehen leider nicht viele [Erst-]Beiträge aus.

Frohe Festtage und ein gutes nächstes Jahr

Biber
[/OT]
Bitte warten ..
Mitglied: bastla
24.12.2009 um 12:34 Uhr
Hallo RazorJack!

Auch von mir eine Gratulation zu der Art Deiner Fragestellung und Rückmeldung!
Soferne Du mit dem einen oder anderen Anführungszeichen im Logfile leben kannst, sollte diese Version des Batches etwas robuster hinsichtlich Sonderzeichen sein und zusätzlich auch Unterordner des Quellordners abdecken (weshalb dann im Logfile der gesamte Pfad ausgegeben wird):
01.
@echo off & setlocal 
02.
set "Quelle=T:\DOWNLOADS\ToCheck" 
03.
set "Ziel=M:\Music\MP3\Other\TEST" 
04.
 
05.
set "Log=T:\DOWNLOADS\ToCheck\Log.txt" 
06.
set "Liste=%temp%\MP3Liste.txt" 
07.
dir "%Ziel%\*.mp3" /s /b>%Liste% 
08.
 
09.
if exist "%Log%" del "%Log%" 
10.
for /f "delims=" %%i in ('dir /s /b "%Quelle%\*.mp3" 2^>nul') do set "DName=%%~ni" & call :ProcessFile "%%i" 
11.
notepad "%Log%" 
12.
goto :eof 
13.
 
14.
:ProcessFile 
15.
for /f "delims=§" %%a in ("%DName: - =§%") do set "Interpret=%%a" 
16.
set "Ordner=" 
17.
for /f "delims=" %%a in ('findstr /c:"\\%Interpret% - " %Liste% 2^>nul') do if not defined Ordner set "Ordner=%%~dpa" 
18.
if not defined Ordner >>"%Log%" echo %1: Noch kein Titel von "%Interpret%" vorhanden! & goto :eof 
19.
echo move %1 "%Ordner%" 
20.
>>"%Log%" echo %1 --^> "%Ordner:~,-1%" 
21.
goto :eof
@All
Die besten Weihnachtswünsche, und, falls wir uns vorher nicht mehr lesen sollten: Alles Gute für 2010!

Grüße
bastla
Bitte warten ..
Mitglied: RazorJack
24.12.2009 um 15:00 Uhr
Hallo nochmal,

bastla, Du hast's wirklich drauf!

Bin grad zu Besuch und wollt nur ma schaun ob ich Antworten gekriegt hab und was seh ich: Du hast Dir nochmals die Mühe gemacht und am Script gearbeitet.

Vielen Herzlichen Dank, auch allen anderen die sich beteiligt haben.
Testen werde ich das ganze nochmal, wenn ich zu hause bin.

Schöne Weihnacht und Guten Rutsch!
Bitte warten ..
Mitglied: RazorJack
06.01.2010 um 20:05 Uhr
So, hallo mal wieder und willkommen im neuen Jahr 2010.

Hab euch nicht vergessen

Brauchte noch etwas Zeit, um einiges zu erledigen und dann endlich den Batch zu testen.
Er funktioniert genauso wie er soll. Wirklich 1A Gebastla!

Beim Ausführen durchkämmt das Script sowohl die Quell-Haupt- und Unterverzeichnisse nach mp3-Dateien, als dann auch die Unterordner im angegebenen Ziel nach den entsprechenden, von den Quelldateien vorgegebenen Interpreten.

Die mp3-Dateien aus dem Quellverzeichnis werden schliesslich in den ersten, dem vorgegebenen Interpreten entsprechenden Ziel-Ordner verschoben.

Das Logfile dient zusätzlich als Kontrolle, wohin die Dateien verschoben wurden oder als Hinweis-Lieferant bei Nichtentsprechung.

Ich muss schon sagen, so für das Gröbste nimmt mir dieses Script wirklich einiges an "Arbeit" ab. Obwohl ich mir ja nicht ungern den einen oder anderen Song ans Ohr lege, aber bei Tausenden Stücken artet es dann schon eher in Arbeit aus.

Natürlich gäbe es Potenzial für Verbesserungen oder eher für den einen oder anderen Feinschliff, aber ein Diamant der Blitzprogrammierung ist er schon mal geworden

Nun kann ich mich mehr dem gezielten Musik-Hörgenuss widmen.

Danke, supa, happy

Grüsse
Bitte warten ..
Mitglied: bastla
06.01.2010 um 21:26 Uhr
Hallo RazorJack!
Danke, supa, happy
Da kommt auch bei mir Freude auf - die durch die Art Deines (ausführlichen) Feedbacks noch verstärkt wird

Falls Dir einmal die Version "für Arme" nicht mehr reicht - lass wieder von Dir lesen (und dann schaun mer mal ) ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Windows Tools
Ordner Verteilen (12)

Frage von Cloudy zum Thema Windows Tools ...

Batch & Shell
gelöst Per Batch Dateien in einen Ordner - ext. Festplatte übertragen (2)

Frage von tocksick zum Thema Batch & Shell ...

VB for Applications
gelöst Mehrere CSV Dateien aus verschiedenen Ordner einlesen via VBA (12)

Frage von mtufangil zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...