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":
[Edit Biber] Codeformatierung um den vermeintlichen "MSDOS Quellcode"/vermutlichen CMD-Batch-Code gesetzt. [/Edit]
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]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 143219
Url: https://administrator.de/forum/2-verzeichnisse-via-variable-vergleichen-als-wsh-script-gesucht-143219.html
Ausgedruckt am: 12.04.2025 um 23:04 Uhr
12 Kommentare
Neuester Kommentar

Hallo Edi.
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
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
Hallo!
da bin ich froh, dass Du nicht die 1. Wiener Hauskrankenpflege brauchst
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...
)
Schildere mal Dein Problem, die Lösung wird nicht lange auf sich warten lassen...
lg
da bin ich froh, dass Du nicht die 1. Wiener Hauskrankenpflege brauchst
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...
Schildere mal Dein Problem, die Lösung wird nicht lange auf sich warten lassen...
lg
[OT]
Moin Edi.Pfisterer,
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]
Moin Edi.Pfisterer,
Zitat von @Edi.Pfisterer:
(LotPings ist mir da in der Vergangenheit als Quell des hilfreichen Wissens schon öfter ins Auge gestochen...
)
(LotPings ist mir da in der Vergangenheit als Quell des hilfreichen Wissens schon öfter ins Auge gestochen...
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]

[OT]

[/OT]
Gruß
LotPings
Zählt das eigentlich als Arbeitsunfall?
OK ok,um keinen Ärger mit der Berufsgenossenschaft zu kriegen, gibts demnächst nur noch etwas stumpfere Tipps [/OT]
Gruß
LotPings
Hallo!
Schutzbrillen sind des Pudels Kern
(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?
Schutzbrillen sind des Pudels Kern
(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?
[OT ii]
Moin Edi,
Genial, dann kann ja nichts mehr ins Auge bzw. den Wissensquellbach runtergehen...
Grüße
Biber
[/OT ii]
Moin Edi,
Genial, dann kann ja nichts mehr ins Auge bzw. den Wissensquellbach runtergehen...
Grüße
Biber
[/OT ii]
Tja, nun mal im Ernst:
ein erster Ansatz (davon ausgehend, dass ich Dein Problem richtig verstanden habe):
hin_und_her_kopieren.vbs
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
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:
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
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
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: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.
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
Hallo!
Ich vertschüss mich jetzt ins laaange Wochenende...
nur ganz kurz zum Verständnis meines Scripts:
folgende Zeile enthält die Sendernamen:
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
THUNDER
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
THUNDER