Jump to content

Ordnersyncronisation in VBS


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Recommended Posts

Hallo ich bin momentan dabei ein script zu schreiben mit dem ich daten aus zwei verzeichnissen syncronisieren kann, ich möchte mit zwei input boxen den quell und zielpfad eingeben und dann eine 1:1 syncronisation durchführen.

Hat vieleicht einer von euch einen kode den ich daran anpasen kann?Hab nämlich noch nicht so die erfahrung mit vbs und wie ich da mit arrays arbeite. hoffe mir kann da einer weiterhelfen!

 

mfg

Link to comment

Hy, nein so ein fertiges programm möchte ich nicht benutzen, das kann ja jeder ;-) da giebt es ja auch bei office das groove dass das ja auch kann.

Nein eigendlich ist es ja eine übung für mich da ich mich momentan mit VBS auseinandersetze und mir denke dass das halt ein programm währe was man auch so ma verwenden kann.

Im prinzib ist es ja wie ein Backup was erst alles was neu ist von verzeichnis 1 nach 2 und dann noch ma von 2 nach 1 kopiert.

Wenn man z.b. einen usb stich mitnimmt mit dem arbeitet und will aber daheim auf dem pc nen backup bzw. eine syncronisation so steck ich den stick rein geb den pfaad an und mein script soll alles syncronisieren.

auch wenn ich ein dokument was ich vieleicht in der letzten woche schon ma gesichert hab und es heute neu bearbeite dann hab ich ja das datum verändert also soll das script die alte version löschen und nur die neue kopieren.

 

wobei das sachen sind die man vieleicht erst ma zurückstellen sollte, da das wichtigste ja erst ma die reine syncronisation ist.

Link to comment

Hy ja das stimmt wohl aber ich bin halt in der sache VBScripting eine neuling hab vor einiger zeit ma mit VB und VBA rumprogrammiert aber bin da nie wirklich tief eingestiegen.

 

Hab hier ma meinen code den ich bis jetzt hab, allerdings muss ich mich da erst ma mit dem FileSystem Object auseinandersetzen da ich das noch nicht kenn.

Hab jetzt was gelesen das ich erst eine bibliothek freischalten muss weil vb fso gar nicht kennt.

 

Option Explicit

'Quell und Ziel Pfad eingabe
Dim varQuellPfad
Dim varZielPfad

varQuellPfad = InputBox("Bitte QuellPfad eingeben")
varZielPfad  = InputBox("Bitte Zielpfad eingeben") & "\"

Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.copyfile "varQuellPfad","varZielPfad", False 

 

 

eigendlich sollte nach meiner auffassung hier einfach alles von verzeichnis a nach b kopiert werden, mit unterordnern usw

Link to comment

aha cool danke.

 

hab jetzt ma

move folder 

verwendet und schon ma ein kleiner erfolgserlebnis.

auch wenn jetzt der ganze start ordner in den ziel ordner reingesteckt wird und nicht nur dessen inhalt:) .

 

 

Option Explicit

'Quell und Ziel Pfad eingabe
Dim varQuellpfad
Dim varZielpfad

varQuellpfad = InputBox("Bitte Quellpfad eingeben")
varZielpfad  = InputBox("Bitte Zielpfad eingeben") & "\"

Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.MoveFolder varQuellpfad, varZielpfad 'False  

Link to comment

hy bin mittlerweile etwas weiter gekommen.

 

 

Option Explicit

'Quell und Ziel Pfad eingabe
Dim varQuellpfad
Dim varZielpfad

varQuellpfad = InputBox("Bitte Quellpfad eingeben") & "\"
varZielpfad  = InputBox("Bitte Zielpfad eingeben") & "\"

' Aufruf der Routine
' Konstanten definieren
Dim VerzeichnisBezeichner
VerzeichnisBezeichner = varQuellpfad

ListeVerzeichnisseRek VerzeichnisBezeichner

Sub ListeVerzeichnisseRek(Verzeichnisname)
' Deklaration der Variablen
Dim FSO, Verzeichnis, UnterVerzeichnis
'Objekt erzeugen
Set FSO = CreateObject("Scripting.FileSystemObject")
' Wenn das Verzeichnis existiert
If FSO.FolderExists(Verzeichnisname) Then
 ' Wenn das Verzeichnis existiert
 Set Verzeichnis = FSO.GetFolder(Verzeichnisname)
 'Alle Unterverzeichnisse auflisten
 For Each UnterVerzeichnis In Verzeichnis.subfolders
  ' WScript.echo Verzeichnisname & UnterVerzeichnis.Name
   ' Erneuter Aufruf mit dem Unterverzeichnis
   ListeVerzeichnisseRek UnterVerzeichnis



FSO.MoveFolder UnterVerzeichnis, varZielpfad   

 Next
End If
End Sub 

 

allerdings kopiert er nur die unterverzeichnisse mit den datei inhalten von a nach b.

wenn ich aber in unterverz. noch weitere unterverz. hab kommt die meldung datei existiert bereits.hmm und das will ich ja nicht.

es sollen ja egal wie viel instanzen die unterverzeichnisse haben erst ma alles kopiert werden egal ob unterordner die selbe bezeichnung haben wie die darüberliegenden.

Link to comment

Dein Script kopiert ja die Unterverzeichnisse "platt" in ein Zielverzeichnis. Wenns dann gleiche Namen gibt, geht das so natürlich nicht.

Wenn du die Verzeichnisse aus einem Baum in einer Zielebene abspeichern willst, häng doch einfach die Baum-Ebene mit an den Ordernamen mit dran.

 

Ansonsten muss das Zielverzeichnis bei nden Rekursionen auch entspr. angepasst werden!

Link to comment

hmm ja wenn ich aber die baumebene mitdrann hänge und ich in 2 verzeichnissen jeweils einen ordner mit der selben bezeichnung hab würde ich doch wieder einen fehler bekommen da ja dann beide verzeichnisse in der selben ebene liegen und die selbe bezechnung haben.

 

wie müsste ich denn vorgehen wenn ich die ordner wieder rekursiv speichern wollte? also das alle unterverzeichnisse auch in den verzeichnissen wieder drinn sind?

Link to comment

Eigentlich so, wie du schon mal angefangen hast. Also einfach ohne Rekursion. Nur statt MoveFolder CopyFolder.

Damit nicht der Quellordner kpl. in den Zielordner reinkopiert wird, einfach ein "\*" an den Quellpfad anhängen. Die Dateien auf der ersten Ebene können dann mit CopyFile hinterherkopiert werden.

So in der Art:

varQuellpfad = InputBox("Bitte Quellpfad eingeben")  & "\*"
varZielpfad  = InputBox("Bitte Zielpfad eingeben") & "\" 

Dim FSO 
Set FSO = CreateObject("Scripting.FileSystemObject")
if not FSO.FolderExists(varZielpfad) then FSO.CreateFolder(varZielpfad) 
FSO.CopyFolder varQuellpfad, varZielpfad  
FSO.CopyFile varQuellpfad, varZielpfad  

Link to comment

hallo hab es hinbekommen das zumindest die verzeichnisse rekursiv in eine richtung gesichert werden nur die dateien die werden noch nicht verschoben weis noch nicht so ganz wie ich da den code zusammenbau!

aber jetzt möchte ich es erst einmal hinbekommen das nur die ordner syncronisiert werden dazu habe ich jetzt folgenden code, geschrieben.

es funktionier wie gesagt in eine richtung aber in die andere kommt die fehlermeldung pfad kann nicht gefunden werden dabei hab ich doch genau den code verwendet den ich auch in die eine richtung benutzt habe aber in die andere will eer nicht.

 

kann aber nicht die ursache finden:confused:

 

 

Option Explicit

'Quell und Ziel Pfad eingabe
Dim varQuellpfad
Dim varZielpfad

varQuellpfad = InputBox("Bitte Quellpfad eingeben") & "\"
varZielpfad  = InputBox("Bitte Zielpfad eingeben") & "\"

' Aufruf der Routine
' Konstanten definieren

Sub PruefeKonventionen
  ' prüft, ob die Ordnernamen mit einem "\" enden
  ' falls ja, wird dieses Zeichen abgeschnitten:
  If Right(originale,1) = "\" Then
     originale = Left(originale, Len(originale)-1)
  End If
  If Right(ziel,1) = "\" Then
     ziel = Left(ziel, Len(ziel)-1)
  End If
End Sub


Dim VerzeichnisBezeichner
VerzeichnisBezeichner = varQuellpfad

ListeVerzeichnisseRek VerzeichnisBezeichner

Sub ListeVerzeichnisseRek(Verzeichnisname)
' Deklaration der Variablen
Dim FSO, Verzeichnis, UnterVerzeichnis
'Objekt erzeugen
Set FSO = CreateObject("Scripting.FileSystemObject")
' Wenn das Verzeichnis existiert
If FSO.FolderExists(Verzeichnisname) Then
 ' Wenn das Verzeichnis existiert
 Set Verzeichnis = FSO.GetFolder(Verzeichnisname)
 'Alle Unterverzeichnisse auflisten
 For Each UnterVerzeichnis In Verzeichnis.subfolders
  ' prüft, ob die Ordnernamen mit einem "\" enden
  ' falls ja, wird dieses Zeichen abgeschnitten:

  ' WScript.echo Verzeichnisname & UnterVerzeichnis.Name
   ' Erneuter Aufruf mit dem Unterverzeichnis

   'ListeVerzeichnisseRek UnterVerzeichnis
FSO.CopyFolder UnterVerzeichnis, varZielpfad   

 Next
End If

End Sub


Sub PruefeKonventionen2
  ' prüft, ob die Ordnernamen mit einem "\" enden
  ' falls ja, wird dieses Zeichen abgeschnitten:
  If Right(originale,1) = "\" Then
     originale = Left(originale, Len(originale)-1)
  End If
  If Right(ziel,1) = "\" Then
     ziel = Left(ziel, Len(ziel)-1)
  End If
End Sub


Dim VerzeichnisRuecksicherung
VerzeichnisRuecksicherung = varZielpfad

Ruecksicherung VerzeichnisRuecksicherung

Sub Ruecksicherung(Verzeichnisname2)
' Deklaration der Variablen
Dim FSO2, Verzeichnis2, UnterVerzeichnis2
'Objekt erzeugen
Set FSO2 = CreateObject("Scripting.FileSystemObject")
' Wenn das Verzeichnis existiert
If FSO2.FolderExists(Verzeichnisname2) Then
 ' Wenn das Verzeichnis existiert
 Set Verzeichnis2 = FSO2.GetFolder(Verzeichnisname2)
 'Alle Unterverzeichnisse auflisten
 For Each UnterVerzeichnis2 In Verzeichnis2.subfolders
  ' prüft, ob die Ordnernamen mit einem "\" enden
  ' falls ja, wird dieses Zeichen abgeschnitten:

  ' WScript.echo Verzeichnisname & UnterVerzeichnis.Name
   ' Erneuter Aufruf mit dem Unterverzeichnis

   'ListeVerzeichnisseRek UnterVerzeichnis
FSO2.CopyFolder varQuellpfad, UnterVerzeichnis2   

 Next
End If

End Sub

Link to comment

soo jetzt hab ich es hinbekommen das erst ma nur die ordner rekursiv erst auf die eine seite kopiert werden und dann noch ma auf die andere seite,.

 

nun muss ich nur noch ma die direkten dateien wieder von dem einem hauptverzeichnis in das andere kopieren. also die dateien die jeweils direkt im ordner liegen, die werden nämlich noch nicht rüber kopiert.

 

habe es mit dem script versucht:

 

varQuellpfad = InputBox("Bitte Quellpfad eingeben")  & "\*"
varZielpfad  = InputBox("Bitte Zielpfad eingeben") & "\" 

Dim FSO 
Set FSO = CreateObject("Scripting.FileSystemObject")
if not FSO.FileExists(varZielpfad) then 

FSO.CopyFile varQuellpfad, varZielpfad  

 

das will auch noch nicht muss zugeben das ich mich da jetzt auch nicht tiefer mit befasst hab, wenn einer einen tipp hat bitte posten.

wollte einfach wieder eine syncronisation vornemen also auch erst von quell nach ziel und wieder zurück.

Link to comment
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...