papp-nase
Goto Top

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:
e478eec7da596fe5b9ca2e1572d2b0e9-batchprob1
Mfg Tommi

Content-Key: 125894

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

Printed on: April 19, 2024 at 19:04 o'clock

Member: miniversum
miniversum Sep 27, 2009 at 15:41:01 (UTC)
Goto Top
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:
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 ....
)
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 ;)
Member: Papp-Nase
Papp-Nase Sep 27, 2009 at 20:52:12 (UTC)
Goto Top
Zitat von @miniversum:
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 ;)

danke für die schnelle antwort,
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.in der for schleife der ersten anweisung müsste ich ja dann etwas schreiben was alle verzeichnisse miteinander vergleicht richtig?
mfg tommi
Member: miniversum
miniversum Sep 28, 2009 at 10:43:22 (UTC)
Goto Top
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).
Member: Papp-Nase
Papp-Nase Sep 28, 2009 at 11:59:31 (UTC)
Goto Top
ja du hsat recht das problem greatest hits tritt wirklich einmal auf..
hab jetz einfach mal probiert mir das auszuplotten aber wenn ich das jetz richtig druchgelesen hab kann batch keine ineiander verschachtelten forschleifen oder?
d.h. die erste for schleife zählt zwar alle durch, hab aber am ende nurnoch den letzten bandnamen drin.
bei:
@echo on
FOR /F "delims=" %%i in ('dir /B /AD "C:\Batch test"') do echo %%i
FOR /F "delims=" %%j in ('dir /B /AD "C:\Batch test\%%i"') do echo %%j
pause
werden zwar die drei bands ausgeworfen nicht aber die dazugehörigen alben. Fehler Datei nicht gefunden.
Member: miniversum
miniversum Sep 28, 2009 at 17:37:48 (UTC)
Goto Top
Doch verschachtelte For-Schleifen gehen. Du must sie nur in Klammern setzen:
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
Eine andere Möglichkeit ist die Benutzung von Unterprozeduren die du per Call aufrufen kannst:
@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
Member: Papp-Nase
Papp-Nase Oct 01, 2009 at 19:44:14 (UTC)
Goto Top
ahhhja cool. dann sollte das problem auf jedenfall mit batch lösbar sein. danke für die hilfe! ich weiß aber nichmal was das delims heißt, aus diesem grund werd ich mir erstmal ein batch buch ausleihen und mir bissl die grundlagen aneignen. deine ansätze helfen mir jedoch schon sehr weiter. ich denke ich werde noch auf einige probleme stoßen aber jetzt versuch ich erstmal das ding allein zu programmieren. danke für deine hilfe =)
Member: miniversum
miniversum Oct 01, 2009 at 19:57:56 (UTC)
Goto Top
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.
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.