Daten nach Kriterien suchen, Verschieben und Überordner löschen.
Wenn man mit Napster Songs runterlädt und anschließend legal überspielt werden alle Lieder, welche nicht nur von einem Interpreten stammen sondern von 2 in extra Ordner gelegt. Um dieses Problem zu beheben wollte ich eine batch-Datei schreiben. Sie soll, da der Albumname der gleiche ist ausfindig machen in welchem Ordner sich weniger Dateien befinden und sie in den Ordner verschieben wo mehr vorhanden sind. Danach den Überordner also den Albumordner und den Interpreten ordner löschen.
Ich habe mir überlegt das dieses Problem mit Batch zu beheben ist. Erst wollte ich es mit C versuchen da ich hier schon einen gewissen Kenntnisstand habe. Allerdings bin ich nicht draufgekommen wie das gehen könnte und so hab ich mich ein bisschen in Batch eingelesen. Das Problem ist das ich nicht genau weiß wie ich das Problem angehen soll, ich würde zuerst Alle Doppelten Ordnernamen suchen müssen. Hierzu müsste das Programm erstmal alle Ordner durchlaufen, die Namen der Unterordner auf Variablen Speichern und sobald 2 namen gleich sind, in diese Ordner gehen und vergleichen in welchem Unterordner weniger Dateien sind, anschließend den Ordner wo weniger drin waren welcher jetzt leer ist inklusive überordner löschen. Es wäre wirklich super wenn mir jemand helfen könnte das zu Programmieren da es jedesmal ziemlich lange dauert das alles von Hand zu machen.
Bild zur Veranschaulichung:
Mfg Tommi
Ich habe mir überlegt das dieses Problem mit Batch zu beheben ist. Erst wollte ich es mit C versuchen da ich hier schon einen gewissen Kenntnisstand habe. Allerdings bin ich nicht draufgekommen wie das gehen könnte und so hab ich mich ein bisschen in Batch eingelesen. Das Problem ist das ich nicht genau weiß wie ich das Problem angehen soll, ich würde zuerst Alle Doppelten Ordnernamen suchen müssen. Hierzu müsste das Programm erstmal alle Ordner durchlaufen, die Namen der Unterordner auf Variablen Speichern und sobald 2 namen gleich sind, in diese Ordner gehen und vergleichen in welchem Unterordner weniger Dateien sind, anschließend den Ordner wo weniger drin waren welcher jetzt leer ist inklusive überordner löschen. Es wäre wirklich super wenn mir jemand helfen könnte das zu Programmieren da es jedesmal ziemlich lange dauert das alles von Hand zu machen.
Bild zur Veranschaulichung:

Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 125894
Url: https://administrator.de/forum/daten-nach-kriterien-suchen-verschieben-und-ueberordner-loeschen-125894.html
Ausgedruckt am: 22.04.2025 um 12:04 Uhr
7 Kommentare
Neuester Kommentar
Vielleicht ein kleiner Ansatz als Hilfe den du verfolgen könntest:
1. Ausgehend vom Grundvereichnis (im Bild "Batch test") suchst du alle Verzeichnisse
(Das wäre dann ungefär so:
2. In diesen Bandunterverzeichnissen jeweils wieder eine Auflistung machen für die Albumtitel
(Das wäre dann ungefär so:
3. Durchsuche das Grundverzeichnis nach andern Kombinationen der Namen und Albentitel suchen ob diese mehr als einmal vorkommen
(Das wäre dann ungefär so:
Das ist jetzt halt nur ne grobe Skizze auf die Schnelle wie es gehen könnte und mit welchen Befehlen. Für die genaue Referenz der Befehle und Parameter der Befehle bitte selbst nachsehen.
Speichern brauchst du dir jedes Verzeichnis ja nicht, da du über die For-Schleifen, in einander verschachtelt, ein Verzeichnis nach dem andern verarbeiten kannst.
Was mir noch einfällt ist, daß nicht klar ist was passieren soll wenn es z.B. den Fall gibt das es "Band1" und "Band2" jeweils einzeln gibt und dann ein Verzeichnis "Band1 zusammen mit Band2". Wohin soll das dann verschoben werden?
Außerdem könnte es passieren das ein Bandname genau so ist wie ein Teil des Bandnamens einer anderen Band, was dann nicht zu unterscheiden wäre wen nur nach Teilstrings gesucht wird. Da würde dann, wenn du z.B. gerade bei "Pink" bist und nach andern Verzeichnissen mit diesem Namen suchst auch "Pink Floyd" oder "Pink turns Blue" gefunden werden und alles unter "Pink" zusammengeworfen werden. Wenn du allerdings einen Musikgeschmack hast der sowas ausschließt, mach das ja nix aus ;)
1. Ausgehend vom Grundvereichnis (im Bild "Batch test") suchst du alle Verzeichnisse
(Das wäre dann ungefär so:
FOR /F "delims=" %%i in ('dir /B /AD "C:\Batch test"') do ... %%i
)2. In diesen Bandunterverzeichnissen jeweils wieder eine Auflistung machen für die Albumtitel
(Das wäre dann ungefär so:
FOR /F "delims=" %%j in ('dir /B /AD "C:\Batch test\%%i"') do ... %%j
)3. Durchsuche das Grundverzeichnis nach andern Kombinationen der Namen und Albentitel suchen ob diese mehr als einmal vorkommen
(Das wäre dann ungefär so:
set nr=0
FOR /F "delims=:" %%k in ('find /N^|dir /s /B /AD "C:\Batch test\%%i *\%%j"') do set nr=%%k
if %nr% gtr 1 ....
)FOR /F "delims=:" %%k in ('find /N^|dir /s /B /AD "C:\Batch test\%%i *\%%j"') do set nr=%%k
if %nr% gtr 1 ....
Das ist jetzt halt nur ne grobe Skizze auf die Schnelle wie es gehen könnte und mit welchen Befehlen. Für die genaue Referenz der Befehle und Parameter der Befehle bitte selbst nachsehen.
Speichern brauchst du dir jedes Verzeichnis ja nicht, da du über die For-Schleifen, in einander verschachtelt, ein Verzeichnis nach dem andern verarbeiten kannst.
Was mir noch einfällt ist, daß nicht klar ist was passieren soll wenn es z.B. den Fall gibt das es "Band1" und "Band2" jeweils einzeln gibt und dann ein Verzeichnis "Band1 zusammen mit Band2". Wohin soll das dann verschoben werden?
Außerdem könnte es passieren das ein Bandname genau so ist wie ein Teil des Bandnamens einer anderen Band, was dann nicht zu unterscheiden wäre wen nur nach Teilstrings gesucht wird. Da würde dann, wenn du z.B. gerade bei "Pink" bist und nach andern Verzeichnissen mit diesem Namen suchst auch "Pink Floyd" oder "Pink turns Blue" gefunden werden und alles unter "Pink" zusammengeworfen werden. Wenn du allerdings einen Musikgeschmack hast der sowas ausschließt, mach das ja nix aus ;)
der schritt 3 sollte eigetnlich wegfallen und damit auch deine zusatzfrage, da er ja ausschließlich nach gleichen alben suchen soll. d.h. auch wenn es band 1 und band 2 auch so gibt, haben sie niemals das gleiche album deshalb sollte er auch nur nach gleichen albennamen suchen. damit wär denk ich auch das problem behogen wenn bandnamen gleich klingen.
Naja nicht unbedingt. Einige Bands haben Alben die heißen: "Best of" oder "Greatest Hits".in der for schleife der ersten anweisung müsste ich ja dann etwas schreiben was alle verzeichnisse miteinander vergleicht richtig?
Das passiert bei hie rin der dritten schleife:dir /s /B /AD "C:\Batch test\%%i *\%%j"
Der Parameter /s sorgt dafür das alle Verzeichnisse und unterverseichnisse gesucht werden.1. Schleife sucht Bandnamen
2. Schleife sucht Albennamen
3. Schleife sucht nach Doppelten (hier müsste halt das umverschieben und löchen der Ordner noch dazu).
Doch verschachtelte For-Schleifen gehen. Du must sie nur in Klammern setzen:
Das sieht dann so aus:
Eine andere Möglichkeit ist die Benutzung von Unterprozeduren die du per Call aufrufen kannst:
Das sieht dann so aus:
@echo off
FOR /F "delims=" %%i in ('dir /B /AD "C:\Batch test"') do (
echo Verarbeite Band: %%i
FOR /F "delims=" %%j in ('dir /B /AD "C:\Batch test\%%i"') do echo Verarbeite Album %%j der Band %%i
)
pause
@echo off
FOR /F "delims=" %%i in ('dir /B /AD "C:\Batch test"') do call:Bandproz "%%i"
pause
goto:eof
:Bandproz
echo Verarbeite Band: %1
FOR /F "delims=" %%j in ('dir /B /AD "C:\Batch test\%%i"') do call:Albumproz %1 "%%j"
:Albumproz
echo Verarbeite Album %2 der Band %1
Du kannst auch einfach die Hilfe zu den einzelnen Befehlen ansehen indem du in der cmd den Befehl mit dem Parameter /? eingibst, also z.B.
Eine weitere Möglichkeit die Sprache zzu erlernen ist einfach hier im Bereich die Postings und die Anleitungen anzusehen, und halt ausprobieren.
for /?
Beim For befehl ist dann z.B. erklärt das delims ein Trennzeichen angibt. Hier also keins, da sonst Verzeichnissnamen mit Leerstellen nur das erste Wort enthalten würden.Eine weitere Möglichkeit die Sprache zzu erlernen ist einfach hier im Bereich die Postings und die Anleitungen anzusehen, und halt ausprobieren.