Karaoke Sammlung, doppelte filtern und verschieben

Hallo erstmal,

Fakten:
Ich habe die letzten Monate damit verbracht meine Karaokesammlung weitgehenst wie folgt zu taggen:
Artist, Title, Album, Track, Label und diversen anderen Tag-Feldern.
Der Dateiname jedes Liedes setzt sich folgendermaßen zusammen:
%artist% - %title% (%label%)

Nun würde ich mir gern ein Script basteln, welches die doppelten rausfiltert (Gleicher Artist und gleicher Titel) und in einen Ordner "doppelte Songs" verschiebt, jeweils in ein Unterordner des jeweiligen Labels. (Mit der dazugehörigen .cdg Datei)

Bei der Auswahl der zu behaltenen Songes, sollte nach einer Hierarchie des Labels vorgegangen werden.
z.B.: bei doppelten alle "zoom" behalten - rest verschieben. Wenn kein ZOOM dabei ist, dann SOUNDCHOICE behalten usw...

z.b.: Bei: JOHN, ELTON - SACRIFICE
sollte also die Version von ZOOM bleiben und die Versionen von Pioneer und Sunfly in die entsprechenden Ordner verschoben werden.

quasi etwa so, kein Plan:

%loop% %title%
%loop% %artist%
wenn mehr als ein Treffer
dann
if %label% == "Zoom" then alle anderen Versionen verschieben
else if %label% == "Soundchoice" then alle anderen Versionen verschieben
usw. bis Prioritätenliste abgearbeitet ist.

nächster Artist
nächster Titel

bischen verzwickt das ganze ^^

Vll kann mir ja jemand ein oder mehrere Lösungsansätze unterbreiten.

P.S.: Achja, bei mehreren gleichen Artist, Titel, Label - erstmal alle behalten (Z.B.: 3 Versionen von ZOOM

Ich wäre über die ein oder andere Hilfe sehr dankbar :slight_smile:

liebe grüße Volker, der seit Jahren mitliest und schon die ein oder andere Hilfe gefunden hat ohne Anmeldung.

MP3tag vergleicht keine Dateien miteinander.
Aber du kannst dir ein Export-Script bauen, mit dem du die Daten in andere Programme exportierst und dort auswertest.

Oder: da du schon eine Prioritätenliste hast, die nach LABEL zu filtern geht:
Benenne doch erst mal alle die Dateien um, die das für dich beste Label haben.
Dazu filterst du nach
label IS Zoom
Zum Umbenennen nimmst du einen Formatstring wie diesen:
d:\musik\rein_karaoke\%artist% - %title%
Wichtig: das neue Verzeichnis muss außerhalb der bisher eingelesenen Dateien liegen.
Dann filterst du nach dem nächstbeliebten Label
label IS Soundchoice
und benennst die Dateien mit dem gleichen Formatstring um:
d:\musik\rein_karaoke\%artist% - %title%
Das müsste bei allen fehlschlagen, die den gleichen Namen haben wie schon verschobene - das müssten dann die doppelten. Jetzt drückst du F5 zum erneuten Einlesen, behälst den Filter bei und löscht dann alle Dateien, die von MP3tag noch gezeigt werden.

Genauso verfährst du mit den weiteren Einträgen für LABEL.
Am Ende dürften keine Dubletten mehr vorhanden sein.

Hallo ohrenkino,
danke erstmal für deine Antwort.

Ich habe versucht es jetzt anderst zu lösen, über eine export-Datei, die eine cmd-Batch Datei generiert.
Dafür habe ich alle Songs neu getaggt und ein neues Feld Prio erstellt und die Labels mit Prio-Nummern ausgestattet.

Klappt fast wunderbar, ausser, dass die CMD irgendwann nach ca. 10.000 Files(also je 5.000 MP3 und 5.000 CDG den dienst quittiert :frowning: (irgendwo zwischen Prio 1 und Prio 2).
Kein Plan woran das liegt.

Hier mal die Export Datei.

$filename($getEnv('USERPROFILE')'\Desktop\KARAOKE.VERSCHIEBEN.cmd',ANSI)$puts(
)'@ECHO OFF'
'CLS'
'REM #######################################################################'
'REM # ------------------------------------------------------------------- #'
'REM # KARAOKE.VERSCHIEBEN.cmd #'
'REM # ------------------------------------------------------------------- #'
'REM # 15.08.2019.- Volker H. #'
'REM # ------------------------------------------------------------------- #'
'REM # DIESES SCRIPT IST ZUM VERSCHIEBEN VON KARAOKE-DATEIEN (MP3,CDG,MP4) #'
'REM # EXPORT SCRIPT FILE: "KARAOKE.VERSCHIEBEN.CMD.MTE #'
'REM # ------------------------------------------------------------------- #'
'REM # '%_datetime%' '%_app%' #'
'REM # ------------------------------------------------------------------- #'
'REM #######################################################################'

'CHCP 1252 1>NUL 2>NUL'

'ECHO.[KARAOKE.VERSCHIEBEN.cmd]'
'ECHO.'

'REM ####################################################################################################'
'REM ----------------------------------------------------------------------------------------------------'
'REM Setze DOS Umgebungsvariable COPYCMD fuer MOVE, COPY, XCOPY Befehle, ...'
'REM ... Bestätigung (anfordern/nicht anfordern) fuer das Überschreiben des Ziels'
'REM ----------------------------------------------------------------------------------------------------'
'REM ####################################################################################################'

'SET COPYCMD=/Y & REM anfordern -Y/ nicht anfordern Y'

'REM ####################################################################################################'
'REM ----------------------------------------------------------------------------------------------------'
'REM Pfadname für die Kontroll-liste ...'
'REM ----------------------------------------------------------------------------------------------------'
'REM ####################################################################################################'

'SET FilePathListfile='$getEnv('USERPROFILE')'\Desktop\KARAOKE.Listfile.txt'

'ECHO.'$char(7)
'CLS'

'REM ####################################################################################################'
'ECHO.------------------------'
'ECHO.Kontroll-Liste speichern'
'ECHO.------------------------'
'REM ####################################################################################################'

'IF EXIST "%FilePathListfile%" DEL /P "%FilePathListfile%" & ECHO.'

'REM ####################################################################################################'

$loop(%prio%)
$loop(%title%)
'REM Loop '%_counter%

'REM ####################################################################################################'
'REM ----------------------------------------------------------------------------------------------------'
'REM # NEUEN ORDNERPFAD SETZEN MIT "" AM ENDE ... Mp3tag PLATZHALTER VERWENDEN'
'REM ----------------------------------------------------------------------------------------------------'
'REM Z.B.: ZOOM: "SET FolderPathNew=O:______fertig_ZOOM'%label%''%album%''"
'REM ----------------------------------------------------------------------------------------------------'
'REM ####################################################################################################'

'SET FolderPathNew=O:______fertig\SAMMELORDNER'

'REM ####################################################################################################'
'REM ----------------------------------------------------------------------------------------------------'
'REM # SPEICHERORT UND DATEINAME DER AKTUELLEN DATEI ... Mp3tag PLATZHALTER VERWENDEN'
'REM ----------------------------------------------------------------------------------------------------'
'REM ####################################################################################################'

'SET FilePathNow='%_folderpath%%_filename%

'REM ####################################################################################################'
'REM ----------------------------------------------------------------------------------------------------'
'REM # ORDNERPFAD IN DEM DIE DATEIEN LIEGEN ... Mp3tag PLATZHALTER VERWENDEN'
'REM ----------------------------------------------------------------------------------------------------'
'REM ####################################################################################################'

'SET FolderPathNow='%_folderpath%

'REM ####################################################################################################'
'REM ----------------------------------------------------------------------------------------------------'
'REM # DATEINAME DER DATEI ... Mp3tag PLATZHALTER VERWENDEN'
'REM ----------------------------------------------------------------------------------------------------'
'REM ####################################################################################################'

'SET FileName='%_filename%

'REM ####################################################################################################'
'REM ----------------------------------------------------------------------------------------------------'
'REM # ZÄHLER'
'REM ----------------------------------------------------------------------------------------------------'
'REM ####################################################################################################'

'SET Progress='%_counter%

'REM ####################################################################################################'
'REM ####################################################################################################'
'REM ----------------------------------------------------------------------------------------------------'
'REM # AUSGABEANZEIGE DES LAUFENDEN PROZESSES IN DOS ... Mp3tag PLATZHALTER VERWENDEN'
'REM ----------------------------------------------------------------------------------------------------'
'REM ####################################################################################################'

'CLS'
'ECHO.-----------------------------------'
'ECHO.Dateien verschieben in neuen Ordner'
'ECHO.-----------------------------------'
'ECHO.VORGANG.NR.....: %Progress%'
'ECHO.-----------------------------------'
'ECHO.-----------------------------------'
'ECHO.Label..........: "%label%"'
'ECHO.-----------------------------------'
'ECHO.Album..........: "%album%"'
'ECHO.-----------------------------------'
'ECHO.Datei..........: "%FileName%"'
'ECHO.-----------------------------------'
'ECHO.-----------------------------------'
'ECHO.Quellpfad......: "%FolderPathNow%"'
'ECHO.Zielpfad.......: "%FolderPathNew%"'
'ECHO.-----------------------------------'
'ECHO.'

'REM ####################################################################################################'
'REM # ORDNER ERSTELLEN IM ZIELPFAD UND DATEIEN KOPIEREN (ZUM VERSCHIEBEN MOVE VERWENDEN)... '
'REM ####################################################################################################'

'IF NOT EXIST "%FolderPathNew%" MD "%FolderPathNew%"'

'IF NOT EXIST "%FolderPathNew%%FileName%.mp3" COPY "%FilePathNow%".mp3 "%FolderPathNew%%FileName%".mp3 /Y'
'IF NOT EXIST "%FolderPathNew%%FileName%.cdg" COPY "%FilePathNow%".cdg "%FolderPathNew%%FileName%".cdg /Y'
'IF NOT EXIST "%FolderPathNew%%FileName%.mp4" COPY "%FilePathNow%".mp4 "%FolderPathNew%%FileName%".mp4 /Y'

'REM ####################################################################################################'

'IF NOT ERRORLEVEL 1 ECHO."--------------------------------------------------------"'
'IF NOT ERRORLEVEL 1 ECHO.ALT: %FolderPathNow%%FileName%.mp3>>"%FilePathListfile%"'
'IF NOT ERRORLEVEL 1 ECHO.NEU: %FolderPathNew%%FileName%.mp3>>"%FilePathListfile%"'
'IF NOT ERRORLEVEL 1 ECHO."--------------------------------------------------------"'
'IF NOT ERRORLEVEL 1 ECHO.ALT: %FolderPathNow%%FileName%.cdg>>"%FilePathListfile%"'
'IF NOT ERRORLEVEL 1 ECHO.NEU: %FolderPathNew%%FileName%.cdg>>"%FilePathListfile%"'
'IF NOT ERRORLEVEL 1 ECHO."--------------------------------------------------------"'
'IF NOT ERRORLEVEL 1 ECHO.ALT: %FolderPathNow%%FileName%.mp4>>"%FilePathListfile%"'
'IF NOT ERRORLEVEL 1 ECHO.NEU: %FolderPathNew%%FileName%.mp4>>"%FilePathListfile%"'
'IF NOT ERRORLEVEL 1 ECHO. '

'REM ####################################################################################################'

'DIR /P/A/N/O "%FolderPathNew%%FileName%.*"'
'ECHO.'
'REM IF ERRORLEVEL 1 PAUSE'

$loopend()
$loopend()

'IF EXIST "%FilePathListfile%" START "Result" /MAX "%FilePathListfile%"'
'DEL "%~0" 1>NUL 2>NUL & EXIT'
'REM ####################################################################################################'
insgesamt hat die CMD Datei dann ca. 2,75 Millionen Zeilen ^^ (Mit den REM Zeilen usw.)

Pro Lied wird dann das produziert:

REM ####################################################################################################
REM ----------------------------------------------------------------------------------------------------
REM # NEUEN ORDNERPFAD SETZEN MIT "" AM ENDE ... Mp3tag PLATZHALTER VERWENDEN
REM ----------------------------------------------------------------------------------------------------
REM Z.B.: ZOOM: "SET FolderPathNew=O:______fertig_ZOOM\CARLONNET\"
REM ----------------------------------------------------------------------------------------------------
REM ####################################################################################################

SET FolderPathNew=O:______fertig\SAMMELORDNER\

REM ####################################################################################################
REM ----------------------------------------------------------------------------------------------------
REM # SPEICHERORT UND DATEINAME DER AKTUELLEN DATEI ... Mp3tag PLATZHALTER VERWENDEN
REM ----------------------------------------------------------------------------------------------------
REM ####################################################################################################

SET FilePathNow=O:____KARAOKE SHOW__ENGLISCH_SONSTIGE\FONSI, LUIS & DADDY YANKEE - DESPACITO

REM ####################################################################################################
REM ----------------------------------------------------------------------------------------------------
REM # ORDNERPFAD IN DEM DIE DATEIEN LIEGEN ... Mp3tag PLATZHALTER VERWENDEN
REM ----------------------------------------------------------------------------------------------------
REM ####################################################################################################

SET FolderPathNow=O:____KARAOKE SHOW__ENGLISCH_SONSTIGE\

REM ####################################################################################################
REM ----------------------------------------------------------------------------------------------------
REM # DATEINAME DER DATEI ... Mp3tag PLATZHALTER VERWENDEN
REM ----------------------------------------------------------------------------------------------------
REM ####################################################################################################

SET FileName=FONSI, LUIS & DADDY YANKEE - DESPACITO

REM ####################################################################################################
REM ----------------------------------------------------------------------------------------------------
REM # ZÄHLER
REM ----------------------------------------------------------------------------------------------------
REM ####################################################################################################

SET Progress=1

REM ####################################################################################################
REM ####################################################################################################
REM ----------------------------------------------------------------------------------------------------
REM # AUSGABEANZEIGE DES LAUFENDEN PROZESSES IN DOS ... Mp3tag PLATZHALTER VERWENDEN
REM ----------------------------------------------------------------------------------------------------
REM ####################################################################################################

CLS
ECHO.-----------------------------------
ECHO.Dateien verschieben in neuen Ordner
ECHO.-----------------------------------
ECHO.VORGANG.NR.....: %Progress%
ECHO.-----------------------------------
ECHO.-----------------------------------
ECHO.Label..........: "%label%"
ECHO.-----------------------------------
ECHO.Album..........: "%album%"
ECHO.-----------------------------------
ECHO.Datei..........: "%FileName%"
ECHO.-----------------------------------
ECHO.-----------------------------------
ECHO.Quellpfad......: "%FolderPathNow%"
ECHO.Zielpfad.......: "%FolderPathNew%"
ECHO.-----------------------------------
ECHO.

REM ####################################################################################################
REM # ORDNER ERSTELLEN IM ZIELPFAD UND DATEIEN KOPIEREN (ZUM VERSCHIEBEN MOVE VERWENDEN)...
REM ####################################################################################################

IF NOT EXIST "%FolderPathNew%" MD "%FolderPathNew%"

IF NOT EXIST "%FolderPathNew%%FileName%.mp3" COPY "%FilePathNow%".mp3 "%FolderPathNew%%FileName%".mp3 /Y
IF NOT EXIST "%FolderPathNew%%FileName%.cdg" COPY "%FilePathNow%".cdg "%FolderPathNew%%FileName%".cdg /Y
IF NOT EXIST "%FolderPathNew%%FileName%.mp4" COPY "%FilePathNow%".mp4 "%FolderPathNew%%FileName%".mp4 /Y

REM ####################################################################################################

IF NOT ERRORLEVEL 1 ECHO."--------------------------------------------------------"
IF NOT ERRORLEVEL 1 ECHO.ALT: %FolderPathNow%%FileName%.mp3>>"%FilePathListfile%"
IF NOT ERRORLEVEL 1 ECHO.NEU: %FolderPathNew%%FileName%.mp3>>"%FilePathListfile%"
IF NOT ERRORLEVEL 1 ECHO."--------------------------------------------------------"
IF NOT ERRORLEVEL 1 ECHO.ALT: %FolderPathNow%%FileName%.cdg>>"%FilePathListfile%"
IF NOT ERRORLEVEL 1 ECHO.NEU: %FolderPathNew%%FileName%.cdg>>"%FilePathListfile%"
IF NOT ERRORLEVEL 1 ECHO."--------------------------------------------------------"
IF NOT ERRORLEVEL 1 ECHO.ALT: %FolderPathNow%%FileName%.mp4>>"%FilePathListfile%"
IF NOT ERRORLEVEL 1 ECHO.NEU: %FolderPathNew%%FileName%.mp4>>"%FilePathListfile%"
IF NOT ERRORLEVEL 1 ECHO.

REM ####################################################################################################

DIR /P/A/N/O "%FolderPathNew%%FileName%.*"
ECHO.
REM IF ERRORLEVEL 1 PAUSE

kein Plan was ich falsch mach :frowning:

Habe ich auch nicht, da ich nichts davon nachstellen kann.
Aber: vielleicht wird die Text-Datei einfach zu groß zur Verarbeitung ...
Vielleicht funktioniert sie mit einem Satz Dateien gefiltert nach Priorität, also das $loop(%prio%) könnte dann raus bzw. hätte keine Auswirkung mehr.

Hi,
Status:

Nachdem ich jetzt aus dem Script alle REM und unnötigen Zeilen raus hab
UND, was viel wichtiger war, aus allen DATEINAMEN die "&" in "AND" geändert hab, lief es anstandslos durch (dauert nur ewig).

Die ersten 20.000 SONGS sind ohne Dubletten, (zumindest die gleicher Schreibweise :wink: )UND bevorzugt nach meiner Prioritätenliste.
(freu)

Hier nochmal das Script:

$filename($getEnv('USERPROFILE')'\Desktop\KARAOKE.VERSCHIEBEN.cmd',ANSI)$puts(
)'@ECHO OFF'
'CLS'

'CHCP 1252 1>NUL 2>NUL'

'SET COPYCMD=/Y & REM anfordern -Y/ nicht anfordern Y'
'SET FilePathListfile='$getEnv('USERPROFILE')'\Desktop\KARAOKE.Listfile.txt'
'ECHO.'$char(7)
'CLS'

'IF EXIST "%FilePathListfile%" DEL /P "%FilePathListfile%" & ECHO.'

$loop(%prio%)
$loop(%title%)
'REM Loop '%_counter%

'SET FolderPathNew=O:______fertig\SAMMELORDNER'
'SET FilePathNow='%_folderpath%%_filename%
'SET FolderPathNow='%_folderpath%
'SET FileName='%_filename%
'SET Progress='%_counter%
'SET label='%label%
'SET Prio='%prio%

'CLS'
'ECHO.VORGANG.NR.....: %Progress%'
'ECHO.Label..........: "%label%"'
'ECHO.Priorität......: "%prio%"'
'ECHO.Datei..........: "%FileName%"'
'ECHO.Quellpfad......: "%FolderPathNow%"'
'ECHO.Zielpfad.......: "%FolderPathNew%"'
'ECHO.'

'IF NOT EXIST "%FolderPathNew%" MD "%FolderPathNew%"'

'IF NOT EXIST "%FolderPathNew%%FileName%.mp3" COPY "%FilePathNow%".mp3 "%FolderPathNew%%FileName%".mp3 /Y'
'IF NOT EXIST "%FolderPathNew%%FileName%.cdg" COPY "%FilePathNow%".cdg "%FolderPathNew%%FileName%".cdg /Y'
'IF NOT EXIST "%FolderPathNew%%FileName%.mp4" COPY "%FilePathNow%".mp4 "%FolderPathNew%%FileName%".mp4 /Y'

'IF NOT ERRORLEVEL 1 ECHO."--------------------------------------------------------"'
'IF NOT ERRORLEVEL 1 ECHO.ALT: %FolderPathNow%%FileName%.mp3>>"%FilePathListfile%"'
'IF NOT ERRORLEVEL 1 ECHO.NEU: %FolderPathNew%%FileName%.mp3>>"%FilePathListfile%"'
'IF NOT ERRORLEVEL 1 ECHO."--------------------------------------------------------"'
'IF NOT ERRORLEVEL 1 ECHO.ALT: %FolderPathNow%%FileName%.cdg>>"%FilePathListfile%"'
'IF NOT ERRORLEVEL 1 ECHO.NEU: %FolderPathNew%%FileName%.cdg>>"%FilePathListfile%"'
'IF NOT ERRORLEVEL 1 ECHO."--------------------------------------------------------"'
'IF NOT ERRORLEVEL 1 ECHO.ALT: %FolderPathNow%%FileName%.mp4>>"%FilePathListfile%"'
'IF NOT ERRORLEVEL 1 ECHO.NEU: %FolderPathNew%%FileName%.mp4>>"%FilePathListfile%"'
'IF NOT ERRORLEVEL 1 ECHO. '

'DIR /P/A/N/O "%FolderPathNew%%FileName%.*"'
'ECHO.'
'REM IF ERRORLEVEL 1 PAUSE'

$loopend()
$loopend()

'IF EXIST "%FilePathListfile%" START "Result" /MAX "%FilePathListfile%"'
'DEL "%~0" 1>NUL 2>NUL & EXIT'

Hallo Volker, servus zusammen,

jetzt muss ich doch noch mal kurz intervenieren.
MP3Tag ist ein super Programm, steht außer Frage, aber vergleicht - wie oben bereits geschrieben wurde - keine Dateien miteiannder.
Diese Script Lösung ist - sorry - frickelei! Warum muss ich unbedingt meinen Toster so umscripten das er Kaffee kochen kann?

Dafür gibt es spezielle Programme - einige sogar - die Tags abgelichen und auf Wunscht sogar unabhängig von allen Tags die Audioprofile miteinander vergleichen.
Freeware, Detusch Mediapurge

Gruß
Peter

Hallo Peter,
da alle anderen Programme, meines wissen auch Mediapurge die dazugehörigen cdg Dateien zu jeder mp3 nicht berücksichtigen. Des weiteren sind eine vielzahl meiner Karaoke auch in mp4.

Erfahrungswerte sagen mir welche Labels gut sind und welche weniger. Daher habe ich beim Taggen Prionummern vergeben. Audioprofile vergleichen bringt garnix, da ich 10 mal das selbe Lied von verschiedenen Labels haben kann, und sie erst garnicht als dupletten erkannt werden.

Mit meinem script funktioniert alles so wie ich es will, von daher für mich perfekt. Inzwischen 48.000 doppelt bis 10fach vorhandene gefiltert ^^

grüße Volker