deejaybee
Goto Top

Ordnersynchronisation via VBScript

Guten Morgen zusammen!

Ich habe drei Verzeichnisse, die ich synchronisieren, bzw. aufteilen muss.

Quellverzeichnis "C:\data\"
- enthält diverse Ordner mit Bezeichnung "[Jahr]\90019xxx" und "[Jahr]\24xxx"
Zielverzeichnis1 "X:\data1\"
- soll enthalten "[Jahr]\90019xx"
Zielverzeichnis2 "X:\data2\"
- soll enthalten "[Jahr]\24xxx"


Im Quellverzeichnis werden von einem Programm diverse Daten abgelegt in der angegebenen Struktur "Jahreszahl\Ordnername\Daten"
Es werden aber auch leere Ordner angelegt.

Ziel ist es, die Ordner mit 90019 beginnend in Zielverzeichnis1 und die Ordner beginnend mit 24 in Zielverzeichnis2 zu synchronisieren/aktualisieren.

Die Verzeichnisse und Daten aus dem Quellverzeichnis können in die Zielverzeichnisse verschoben werden.
Es wird vorkommen, dass identische Ordner im Quellverzeichnis erstellt werden, dann sind die Daten ebenfalls ins entsprechende Zielverzeichnis zu verschieben, bestehende Daten mit gleichem Namen können überschrieben werden.


Warum vbs und kein "normales" Sync-Tool?
Das Zielverzeichnis ist keine normales Netzlaufwerk, d.h. ein normales Verschieben funktioniert nicht! Das ist auch der Grund, warum das Programm die Daten nicht direkt im Zielverzeichnis ablegen kann.
Daher kann ich leider auch kein einfaches Batch-Script nehmen, das hätte ich so hinbekommen...

Ich wette das Script ist einfacher, als es meine Erklärung ist, aber ich steh in vielen Fällen mit vbs auf dem Kriegsfuss und bräuchte Eure Hilfe, Tipps etc.

Vielen vielen Dank schon einmal im Voraus.
Schöne Grüße

Content-Key: 254839

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

Printed on: April 26, 2024 at 22:04 o'clock

Mitglied: 114757
114757 Nov 14, 2014 updated at 17:30:05 (UTC)
Goto Top
Moin,
Warum vbs und kein "normales" Sync-Tool?
Das Zielverzeichnis ist keine normales Netzlaufwerk, d.h. ein normales Verschieben funktioniert nicht!
hää?? wie sollen wir das verstehen ? wenn sich die Files im Explorer oder in der Shell nicht verschieben oder kopieren lassen kann VBS das auch nicht. Werde mal konkret um was es sich für ein Laufwerk handelt ! robocopy macht dir das problemlos automatisch egal wohin.

Gruß jodel32
Member: Crusher79
Crusher79 Nov 14, 2014 at 17:56:34 (UTC)
Goto Top
Hi,

klar ist das Ziellaufwerk kein "normales". Hat ja auch nen X......

So funktioniert das hier nicht! Musst schon sagen um was es sich dabei handelt: UNC Pfad, FTP, Memory vom Smartphone?

Schreib so detailiert was los ist. Kennwörter, Domain, etc. will hier eh keiner Wissen. Sollte doch möglich sein, eine relativ vollständige Frage zu formulieren.

mfg Crusher
Member: DeeJayBee
DeeJayBee Nov 16, 2014 at 21:25:41 (UTC)
Goto Top
Hallo,

vielleicht habe ich mich unglücklich ausgedrückt...

Das Ziellaufwerk ist eine Art virtuelles Laufwerk. Genau genommen die Software Windream. Die Software benötigt für ein Script eine spezielle Anmeldung. Diese kann ich einbauen, ansonsten kann man das Laufwerk wie ein normales verwenden.
Die Dateien lassen sich per Explorer manuell verschieben. Per Shell nicht, da der Login fehlt. Per vbs läßt sich dies realisieren.

Aber abgesehen davon ist das für die Problematik vollkommen egal.
Ich suche nur nach einer Lösung für das Aufteilen und Verschieben von Dateien/Ordnern aus einem Quelllaufwerk in zwei Ziellaufwerke.
Und das ist doch eine relativ vollständige Frage, oder nicht? Ich habe nur versucht etwas Hintergrund zu ergänzen, warum ich das ausgerechnet in vbs benötige.

Wenn robocopy das auch kann, ich bin gespannt und würde es gerne testen, auf die Idee bin ich noch nicht gekommen.

Schöne Grüße
Member: Crusher79
Crusher79 Nov 16, 2014 at 22:56:39 (UTC)
Goto Top
Hab grad mal die Anleitung beri denen ürberflorgen. Als Client-Server Anbindung wird dort normales mappen via Explorer beschrieben - vgl. net use.

net use z: \\server\windream /user:windream xyz

Funktioniert sowas? Oder wie ist das Laufwerk bei dir gempapped? Wenn Du UNC Pfad mappen kannst, kannst du auch jedes beliebige Skript nehmen. Solange das Lw verbunden ist, sollte es dann doch keine Eisnchränkungen geben.
Member: DeeJayBee
DeeJayBee Nov 17, 2014 at 07:30:07 (UTC)
Goto Top
Du hast da vollkommen Recht.
Und wie Du schon sagst, solange das Laufwerk verbunden ist... leider funktioniert es mit Batch nicht.
Ich kann zwar mit Batch drauf zugreifen, aber copy/xcopy funktioniert nicht. Über vbs geht das!

Aber mein Problem ist nicht das mappen, sondern das "umkopieren", das verteilen.
Member: Crusher79
Crusher79 Nov 17, 2014 at 07:38:56 (UTC)
Goto Top
Ok verstehe! Oder auch nicht...

Woher weisst Du das mit VBS? Hast du da schon was probiert?
Member: DeeJayBee
DeeJayBee Nov 17, 2014 at 07:49:22 (UTC)
Goto Top
Ja,

ich habe ein Script von denen bekommen, wo auch die exakte Vorgehensweise anhand eines Beispiels mit Login, Speicherort überprüfen, Ordner anlegen, Datei erstellen, Datei sperren, Inhalt kopieren, Datei wieder freigeben beschrieben ist.
Wie gesagt, das kann ich selbst einbauen / nachtragen, ist für das Script also vollkommen irrelevant.

Ich brauche nur den Teil wie beschrieben.
Kopiere/Verschiebe aus Quelle alle Ordner mit 90019xxx nach Ziel1 und alle mit 24xxx nach Ziel2

Eine Datei, deren Namen mir bekannt ist, schaff ich gerade noch mit vbs selbst zu kopieren. Aber ein komplettes Verzeichnis so aufzutrennen,... da häng ich fest face-sad
Member: colinardo
Solution colinardo Nov 19, 2014, updated at Nov 27, 2014 at 07:55:33 (UTC)
Goto Top
Hallo DeeJayBee,
Ich brauche nur den Teil wie beschrieben.
Kopiere/Verschiebe aus Quelle alle Ordner mit 90019xxx nach Ziel1 und alle mit 24xxx nach Ziel2
Const SOURCEFOLDER = "C:\data"  
Const TARGETFOLDER = "X:\data1"  
Const TARGETFOLDER2 = "X:\data2"  
Set fso = CreateObject("Scripting.Filesystemobject")  
Set regex = CreateObject("vbscript.regexp")  
regex.Pattern = "^\d{4}$"  

If Not fso.FolderExists(TARGETFOLDER) Then fso.CreateFolder(TARGETFOLDER)
If Not fso.FolderExists(TARGETFOLDER2) Then fso.CreateFolder(TARGETFOLDER2)

For Each folder In fso.GetFolder(SOURCEFOLDER).SubFolders
	If regex.Test(folder.Name) Then
		target1 = TARGETFOLDER & "\" & folder.Name  
		target2 = TARGETFOLDER2 & "\" & folder.Name  
		If Not fso.FolderExists(target1) Then fso.CreateFolder(target1)
		If Not fso.FolderExists(target2) Then fso.CreateFolder(target2)
		On Error Resume Next
		fso.CopyFolder folder.Path & "\90019*",target1,True  
		fso.CopyFolder folder.Path & "\24*",target2,True  
		fso.DeleteFolder folder.Path & "\90019*"  
		fso.DeleteFolder folder.Path & "\24*"  
	End If
Next
MsgBox "Finished"  
Set fso = Nothing
Set regex = Nothing
Grüße Uwe
Member: DeeJayBee
DeeJayBee Nov 27, 2014 at 07:55:14 (UTC)
Goto Top
Perfekt. Vielen Dank!