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

Daten nach Kriterien suchen, Verschieben und Überordner löschen.

Frage Entwicklung Batch & Shell

Mitglied: Papp-Nase

Papp-Nase (Level 1) - Jetzt verbinden

27.09.2009 um 13:26 Uhr, 6067 Aufrufe, 7 Kommentare

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 - Klicke auf das Bild, um es zu vergrößern
Mit freundlichen Grüßen Tommi
Mitglied: miniversum
27.09.2009 um 17:41 Uhr
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 ;)
Bitte warten ..
Mitglied: Papp-Nase
27.09.2009 um 22:52 Uhr
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?
Mit freundlichen Grüßen tommi
Bitte warten ..
Mitglied: miniversum
28.09.2009 um 12:43 Uhr
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).
Bitte warten ..
Mitglied: Papp-Nase
28.09.2009 um 13:59 Uhr
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.
Bitte warten ..
Mitglied: miniversum
28.09.2009 um 19:37 Uhr
Doch verschachtelte For-Schleifen gehen. Du must sie nur in Klammern setzen:
Das sieht dann so aus:
01.
@echo off 
02.
FOR /F "delims=" %%i in ('dir /B /AD "C:\Batch test"') do ( 
03.
echo Verarbeite Band: %%i 
04.
FOR /F "delims=" %%j in ('dir /B /AD "C:\Batch test\%%i"') do echo Verarbeite Album %%j der Band %%i 
05.
06.
pause
Eine andere Möglichkeit ist die Benutzung von Unterprozeduren die du per Call aufrufen kannst:
01.
@echo off 
02.
FOR /F "delims=" %%i in ('dir /B /AD "C:\Batch test"') do call:Bandproz "%%i" 
03.
pause 
04.
goto:eof 
05.
 
06.
:Bandproz 
07.
echo Verarbeite Band: %1 
08.
FOR /F "delims=" %%j in ('dir /B /AD "C:\Batch test\%%i"') do call:Albumproz %1 "%%j" 
09.
 
10.
:Albumproz 
11.
echo Verarbeite Album %2 der Band %1
Bitte warten ..
Mitglied: Papp-Nase
01.10.2009 um 21:44 Uhr
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 =)
Bitte warten ..
Mitglied: miniversum
01.10.2009 um 21:57 Uhr
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.
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Windows Server
Daten löschen - Windows Error Reporting (WER) (2)

Frage von Otto1699 zum Thema Windows Server ...

Batch & Shell
gelöst Skript für Daten löschen (3)

Frage von DarkJM zum Thema Batch & Shell ...

Soziale Netzwerke
Facebook muss Daten von Whats App löschen (10)

Information von brammer zum Thema Soziale Netzwerke ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (9)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...