emperor
Goto Top

2 Verzeichnisse via Variable vergleichen - als wsh script gesucht

Ich suche ein WSH Script, welches 2 Verzeichnisse vergleicht und einpaar Dateioperationen ausführt

Hallo

ich suche ein wsh skript, welches 2 Verzeichnisse vergleicht.
Ich habe eine Batchdatei im Einsatz, welches aber gerne in wsh haben möchte.

plus:
- Quell- und Ziel pfad in ein Array speichern und dann vergleichen
- Suchen in den Arrays mit und ohne Wildcards (Datei*.*; lo?file*.*, usw.)

- mehrere Zielpfade mit nur einem Quellpfad vergleichen, ohne das Programm fuer jeden Vergleich zu "kopieren".
z.B.
set verz-a=c:\pfade-a
set verz-b=c:\pfade-b
vergleiche

set verz-a=c:\pfade-a
set verz-b=c:\pfade-c
vergleiche
usw ....

Gruss

Anbei mein ursprüngliches "MSDOS Quellcode":
set verz-a=c:\pfade-a
set verz-b=c:\pfade-b

for /R %pfade-a% %%I in (*.*) do (
	for /R %pfade-b% %%J in (*.*) do (
		IF .%%~nI%%~xI.==.%%~nJ%%~xJ. (
			md doppelt-a
			robocopy %%I doppelt-a\%%J
			del %%J
		)))

[Edit Biber] Codeformatierung um den vermeintlichen "MSDOS Quellcode"/vermutlichen CMD-Batch-Code gesetzt. [/Edit]

Content-Key: 143219

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

Printed on: April 25, 2024 at 15:04 o'clock

Member: Edi.Pfisterer
Edi.Pfisterer May 20, 2010 at 09:58:26 (UTC)
Goto Top
Hallo!
falls Du statt WHS (googeln brachte an 1. Stelle Wiener Hauskrankenpflege) WSH meinst, also VBS, dann könnte ich Dir helfen.
Vorausgesetzt, ich verstehe Dein Problem. Da meine DOS-Kenntnisse dürftig sind, wäre eine verbale Problembeschreibung hilreich.

lg
Edi
Member: emperor
emperor May 20, 2010 at 10:19:42 (UTC)
Goto Top
Hallo

Ja ich meine WSH.
(Soll ich Dir via administrator.de eine priv. Nachricht schicken ?)

Gruss
Mitglied: 77559
77559 May 20, 2010 at 10:48:03 (UTC)
Goto Top
Zitat von @Edi.Pfisterer:
Hallo Edi.
also VBS, dann könnte ich Dir helfen. Vorausgesetzt, ich verstehe Dein Problem.
Tue ich auch nicht.
Da meine DOS-Kenntnisse dürftig sind, wäre eine verbale Problembeschreibung hilreich.
Da stimme ich dir auch zu,
Der Batch code ist nämlich erstens sehr ineffizient und kann so für Unterverzeichnisse auch nicht fuinktionieren.
Die innere For /R Schleife ist so eingesetzt absolut Sinnfrei.

Gruß
LotPings
Member: Edi.Pfisterer
Edi.Pfisterer May 20, 2010 at 11:41:16 (UTC)
Goto Top
Hallo!
da bin ich froh, dass Du nicht die 1. Wiener Hauskrankenpflege brauchst face-wink

ein Priv. Nachricht ist natürlich ok, besser ist aber sicher, hier direkt Dein Problem zu schildern, damit derjenige von uns, der gerade Zeit hat und das entsprechende Wissen abzurufen bereit ist, mithelfen kann...
(LotPings ist mir da in der Vergangenheit als Quell des hilfreichen Wissens schon öfter ins Auge gestochen... face-wink )

Schildere mal Dein Problem, die Lösung wird nicht lange auf sich warten lassen...

lg
Member: emperor
emperor May 20, 2010 at 12:36:24 (UTC)
Goto Top
Also ich zeichne einpaar Radiosendungen aus dem Internet auf (siehe auch SHOUTcast Radio).
Ich habe einpaar Verzeichnisse, wo Musikstücke abgelegt sind, die mir gefallen.
(z.B. Top Hits, Hit 90, usw.)

Wenn ich an meinen PC erneut Musikstücke von den Radiosender abspeichere, will ich die neuen Dateien, nicht mit den bestehenden mischen. Weil manche Files mir nicht gefallen. (die liste ist ca. 5200 Zeilen lang; gibt es auch hier eine bessere Moeglichkeit, als del Dateiname.mp3 zu machen ? face-wink )

Nun zu meinem Problem.
Derzeit habe ich eine Batch Routine (u.a. aus dem Internet zusammen gebaut), welches mir diese Verzeichnisse vergleicht. Damit weis ich, ob ich neue und doppelte Musikstücke habe. Die doppelten werden in ein seperates Verzeichnis kopiert das doppelt-radiosender heist.

Da meine Routine nun sehr umfangreich ist, weil ich zeimlich viele Radiosender vergleiche und nun viele Dateien habe, braucht diese auch sehr lange. Die Verzeichnissnamen, uebergebe ich als Variable an die "subroutine".
Meine Kenntnisse in VB/WSH sind eingeschränkt.
Daher meine Frage an die Community mit der Bitte um Hilfe...

Beispiel:
Quelle: c:\musik\radio-okay\Radiosender-A
Ziel:
c:\musik\ungeprueft\Radiosender-A
c:\musik\ungeprueft\Radiosender-B
c:\musik\ungeprueft\Radiosender-C

Bei diesen 3 Zielverzeichnisse, soll er die Doppelten mp3s in die jeweiligen Verzeichnis "doppelt-radio" verschieben. Manche musikstücke sollen auch mittels Wildcard überprüft werden, da die Radiosender sich nicht an den Dateinamen genau halten.
Wie z.B. Hans Meier - Titel.mp3, Hans Meier - Guten Morgen (tv version).mp3.
Beide sind gleich, nur mittels dem Zusatz (tv version) unterscheiden sie sich, als Dateiname.

Soweit okay ?
Member: Biber
Biber May 20, 2010 at 13:11:28 (UTC)
Goto Top
[OT]
Moin Edi.Pfisterer,

Zitat von @Edi.Pfisterer:
(LotPings ist mir da in der Vergangenheit als Quell des hilfreichen Wissens schon öfter ins Auge gestochen... face-wink )

Inhaltlich stimme ich dir ja zu, aber stilistisch sehe ich noch Potentiale.

A propos "Wiener Hauskrankenpflege"...
Mögest du nie wieder wegen Stichverletzungen durch Wissensquellen behandelt werden müssen...

Zählt das eigentlich als Arbeitsunfall?

Grüße
Biber
[/OT]
Mitglied: 77559
77559 May 20, 2010 at 13:32:04 (UTC)
Goto Top
[OT]
Zählt das eigentlich als Arbeitsunfall?
OK ok,um keinen Ärger mit der Berufsgenossenschaft zu kriegen, gibts demnächst nur noch etwas stumpfere Tipps face-wink
[/OT]
Gruß
LotPings
Member: Edi.Pfisterer
Edi.Pfisterer May 20, 2010 at 14:50:32 (UTC)
Goto Top
Hallo!
Schutzbrillen sind des Pudels Kern face-wink
(geile Vorstellung, oder?)

@ emperor:
ganz durchschaut hab ichs noch nicht...

ich schreib mal, wie ich es verstehe:
du hast bereits n Radiosendungen im Ordner c:\musik\radio-okay\Radiosender-A

und nun besorgst Du dir weitere Sicherheitskopien aus dem Internet und speicherst sie im Ordner
c:\musik\ungeprueft\Radiosender-A
c:\musik\ungeprueft\Radiosender-B
c:\musik\ungeprueft\Radiosender-C

und nun möchtest Du JEDE datei aus dem Ordner c:\musik\ungeprueft\Radiosender-A vergleichen mit dem Inhalt des Ordners c:\musik\radio-okay\Radiosender-A.
Falls es eine Datei gibt, die bereits vorhaden ist, dann soll sie aus dem Ordner
c:\musik\ungeprueft\Radiosender-A
in den Ordner
c:\musik\doppelt-radio
verschoben werden.
Anderenfalls soll die Datei in den Ordner c:\musik\radio-okay\Radiosender-A. verschoben werden.

Das ganze soll dann wiederholt werden mit c:\musik\ungeprueft\Radiosender-B usw.

UND: es soll mit Wildcards gearbeitet werden...

Ist dem so?
Member: Biber
Biber May 20, 2010 at 19:27:00 (UTC)
Goto Top
[OT ii]
Moin Edi,

Zitat von @Edi.Pfisterer:----
Schutzbrillen sind des Pudels Kern face-wink
Genial, dann kann ja nichts mehr ins Auge bzw. den Wissensquellbach runtergehen...

Grüße
Biber
[/OT ii]
Member: Edi.Pfisterer
Edi.Pfisterer May 20, 2010 at 21:47:36 (UTC)
Goto Top
Tja, nun mal im Ernst:

ein erster Ansatz (davon ausgehend, dass ich Dein Problem richtig verstanden habe):
hin_und_her_kopieren.vbs
Set objFSO = CreateObject("Scripting.FileSystemObject")  
On error resume next
function ordner(pfad, pfad1)
wscript.echo pfad
wscript.echo pfad1
        Set objFolder = objFSO.GetFolder(pfad)

             Set FileList = objFolder.Files
                For Each File in FileList
                   ' Wscript.Echo File.Name & VbTab & File.Size & File.DateLastModified  
                   Liste = liste & File.Name & "?"  
                Next

     RadioOkay = Split(Liste,"?")  

wscript.echo "Der Ordner " & pfad & " enthält "& Ubound(RadioOkay)+1 &" Dateien!"  




       Set objFolder = objFSO.GetFolder(pfad1)

             Set FileList = objFolder.Files
                For Each File in FileList
                kopieren = 0
                    b=Filter(RadioOkay,File.Name, True, 1)
                        for each x in b

                              wscript.echo x & " ist bereits vorhanden!"  
                              'objFSO.MoveFile File , "c:\musik\doppelt-radio\" & x  
                              kopieren = kopieren +1

                        next

                        if kopieren = 0 then
                                Dateiname = right(file, (len(file) - instrRev(file,"\")))  
                                wscript.echo Dateiname & " würde ich in Radio-Files verschieben!"  
                                'objFSO.MoveFile File , pfad & "\" & Dateiname  
                        end if
                Next

end function

sender = split("Radiosender-A;Radiosender-B;Radiosender-C",";")  
for i = 0 to UBound(sender)
call ordner("c:\musik\radio-okay\" & sender(i), "c:\musik\ungeprueft\"  & sender(i))  
next

Dieses - relativ ungetestete - Schnipsel (relativ, weil nicht mit deinen Pfaden - mit meinen Pfaden funktionierts...) liest in dieser Version nur mal die Dateien aus, damit du sehen kannst, was passieren würde...

(Zur Info: Abbruch der Bildschirmausgabe über den Taskmanager --> wscript.exe beenden! Ansonsten klickst Du dich zu Tode...)

Wenn das so läuft, wie Du es dir gewünscht hast:
Hochkkomma vor den Zeilen, die mit wscript beginnen setzen, damit diese auskommentiert werden, stattdessen
die Hochkomma vor den Zeilen mit 'objFSO.MoveFile entfernen...

Was die Abteilung Wildcards betrifft: bin mir da nicht sicher, wie das funktionieren soll...
Reiner Buchstabenvergleich (zB alle Buchstaben + deren Vorkommen erfassen und miteinander vergleichen) bringts ja nicht wirklich... da wäre ja Stones und Milestones schon sehr ähnlich und WINtEr bzw. WEIN noch ähnlicher (Übereinstimmung von 4 aus 6 Buchstaben, dh ca in etwa fast beinahe 75 % wenn ich meinen Schülern Glauben schenken darf face-wink
Teile miteinander zu vergleichen führt zum Stones bzw. Milestones-Problem...
Falls die Übereinstimmungen einem Muster folgen, könnten wir uns allerdings einer Lösung nähern...

Hoffe, etwas geholfen zu haben
lg
Edi

edit:
habe mir nochmal Deine Frage durchgelesen:
Manche musikstücke sollen auch mittels Wildcard überprüft werden, da die Radiosender sich nicht an den Dateinamen genau halten.
Wie z.B. Hans Meier - Titel.mp3, Hans Meier - Guten Morgen (tv version).mp3.
Beide sind gleich, nur mittels dem Zusatz (tv version) unterscheiden sie sich, als Dateiname.
2 Anmerkungen:
ich finde nicht, dass Hans Meier - Titel.mp3, Hans Meier - Guten Morgen (tv version).mp3. gleich sind. Wie soll diese Routine erkennen, dass sich hinter Titel der Song Guten Morgen verbirgt?
Was anderes wäre es, wenn Du vernünftige ID3-Tags in Deinen mp3-files angelgt hast. Überprüf das bitte mal...
Wenn der Eintrag im ID3-Tag bei Titel übereinstimmt, könnten wir das Problem sicher lösen
Member: emperor
emperor May 21, 2010 at 09:54:26 (UTC)
Goto Top
ViELEN Dank !!!
Werde das am WE Testen...

Anbei die Verzeichnisse, wie sie bei mir aussehen.
Vielleicht kannst Du bitte das Skript noch so umändern, das z.B. wie bei "c:\musik\uncheck\181.fm - Awesome 80's\doppelt-181.fm - Awesome 80's" die doppelten Files verschoben werden
Am Schluss des Skripts, soll er noch eine Datei in c:\musik\uncheck\181.fm - Awesome 80's\doppelt-181.fm - Awesome 80's und in allen anderen "doppelt-...... " Verz. kopieren..

Hier ein auszug an Radiosender die ich aufnehme. Neue Dateien von den Radiosender wandern in \uncheck\...... wie unten angefuehrt.
Da ich nicht immer Zeit habe, die Files einzusortieren, habe ich nicht nur ein uncheck1 sondern auch uncheck2, uncheck3 usw...

c:\musik\okay\181.fm - Awesome 80's <-> c:\musik\uncheck1\181.fm - Awesome 80's\doppelt-181.fm - Awesome 80's
c:\musik\okay\181.fm - Awesome 80's <-> c:\musik\uncheck1\181.FM - Lite 80's\doppelt-181.fm - Awesome 80's

c:\musik\okay\181.FM - Lite 80's <-> c:\musik\uncheck1\181.FM - Lite 80's\doppelt-181.FM - Lite 80's
c:\musik\okay\181.FM - Lite 80's <-> c:\musik\uncheck1\181.fm - Awesome 80's\doppelt-181.fm - Awesome 80's

copy c:\musik\batch\!Streamriper-ausgabe-del.cmd "c:\musik\uncheck\181.fm - Awesome 80's\doppelt-181.fm\doppelt-ausgabe\ /Y
(also in jedem doppelten Verzeichniss, soll die Datei kopiert werden).

Wildcards
Ich stell mir sowas, wie bei Excel mit der Funktion rechts(Zahl) vor um die entsprechenden Interpreten besser zu finden..
Die mp3 Tags, das geht (noch) nicht, da ich den streamripper von winamp verwenden (msdos version). Damit kann ich mehrere Sender gleichzeitig aufnehmen.
(mehrere streamripper instanzen werden hierzu gestartet)

Gruss und tausend Dank fuer Deine Hilfe face-wink
Member: Edi.Pfisterer
Edi.Pfisterer May 21, 2010 at 10:05:34 (UTC)
Goto Top
Hallo!
Ich vertschüss mich jetzt ins laaange Wochenende...
nur ganz kurz zum Verständnis meines Scripts:

folgende Zeile enthält die Sendernamen:

sender = split("Radiosender-A;Radiosender-B;Radiosender-C",";")

hier kannst Du x-beliebig viele Sender einfügen und durch ; trennen...
Das Skript bastelt dann daraus den Ordnernamen selbständig, dh aus Radiosender-A wird
c:\musik\radio-okay\Radiosender-A
bzw
c:\musik\ungeprueft\Radiosender-A

Falls es doppelt vorkommt, wirds in den Ordner c:\musik\doppelt-radio\ [Zeile 30] geschoben, ansonsten beben nach
c:\musik\radio-okay\Radiosender-A

langer Rede, kurzer Sinn:
Du brauchst nur die Zeile 30 und Zeilen 44 bzw. 46 ändern und das sollte es gewesen sein...

PS: wenn du mir verrätst, wie du dir das vorgestellt hast mit der Funktion rechts(Zahl) [soll heissen, wieviele Zeichen von rechts] dann ist das kein grosses Thema..
und mir machts auch nichts aus, falls das jemand anders hier verändert...
wie gesagt: mein laaanges Wochenende mit AC/DC in Wels morgen Abend sind mir quasi heilig face-wink
THUNDER