- #1
W
Weissertiger
Bekanntes Mitglied
Themenersteller
- Dabei seit
- 04.11.2003
- Beiträge
- 46
- Reaktionspunkte
- 0
Hilfe! Habe ein VBS-Script gefunden, das ich auf meine Bedürfnisse anpassen wollte. Leider funktioniert es nicht richtig, wenn ich für mydocuments wie im File Beschrieben einen Ordner C:\temp\test nehme. Lasse ich mydocuments drin, funktioniert das Script, und es kopiert die ganzen Files in den Backup Ordner.
' Zähler:
sys_kopiert = 0
sys_aktuell = 0
sys_ordner = 0
'SYS: Microsoft (r) Script Runtime
Set fs = CreateObject(Scripting.FileSystemObject)
'SYS: Windows Script Host Runtime Library
Set wshshell = CreateObject(WScript.Shell)
' In diesem Ordner liegen die Originaldaten:
' Sie könnten auch einen festen Ordnernamen angeben
' z.B. originale = C:\wichtige dinge
originale = wshshell.SpecialFolders(mydocuments)
' Hier sollen die Sicherungskopien gespeichert werden:
ziel = c:\temp\backup
PruefeKonventionen
MsgBox Starte Backup, sobald Sie auf OK klicken!
SichereOrdner originale, ziel
list = Backup abgeschlossen. Ergebnis: & vbCr
list = list & sys_kopiert & Dateien kopiert. & vbCr
list = list & sys_aktuell & Dateien waren aktuell und wurden nicht kopiert. & vbCr
list = list & sys_ordner & Ordner wurden neu angelegt.
MsgBox list, vbInformation
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
Sub SichereOrdner(pfad, ziel)
-> sichert einen Ordner
If Not fs.FolderExists(pfad) Then
MsgBox Ordner & pfad & existiert nicht!
Exit Sub
End If
Set ordner = fs.GetFolder(pfad)
For each datei in ordner.Files
-> Das Skript nimmt den Originalpfad der zu sichernden
-> Datei und ersetzt darin lediglich den Originalordner
-> durch den Zielordner
zielpfad = Replace(datei.Path, originale, ziel)
-> wie lautet der reine Ordnername? Dazu wird der Dateiname
-> entfernt.
zielordner = Left(zielpfad, InStrRev(zielpfad, \))
-> wenn der Zielordner noch nicht existiert, wird er
-> angelegt:
If Not fs.FolderExists(zielordner) Then
LegeOrdnerAn zielordner
End If
-> gibt es die Datei im Backupordner nicht? Dann anlegen!
If Not fs.FileExists(zielpfad) Then
datei.Copy zielordner
sys_kopiert = sys_kopiert + 1
Else
-> hat sich die Datei verändert? Ist Archiv-Bit gesetzt?
If (datei.Attributes And 32)<>0 Then
datei.Copy zielordner
sys_kopiert = sys_kopiert + 1
Else
sys_aktuell = sys_aktuell + 1
End If
End If
-> Attribut auf jeden Fall scharf stellen, also löschen
-> damit Änderungen beim nächsten Backup sichtbar werden
-> und unveränderte Dateien nicht ein zweites Mal kopiert werden
datei.Attributes = datei.Attributes And Not 32 And Not (8+16+64+128)
Next
-> Damit auch die Unterordner gesichert werden,
-> ruft sich diese Prozedur einfach selbst für alle Unterordner
-> auf (rekursiver Aufruf)
For each unterordner in ordner.SubFolders
-> Diesen Ordner im Backup-Verzeichnis anlegen
-> dazu wieder Originalordner ersetzen durch Zielordner
LegeOrdnerAn Replace(unterordner.Path, originale, ziel)
-> Diesen Unterordner ebenfalls sichern
SichereOrdner unterordner.Path, ziel
Next
End Sub
Sub LegeOrdnerAn(pfad)
If Right(pfad,1) = \ Then
neuerpfad = Left(pfad, Len(pfad)-1)
Else
neuerpfad = pfad
End If
anteile = Split(neuerpfad, \)
For each anteil in anteile
checkpfad = checkpfad & anteil & \
If Not fs.FolderExists(checkpfad) Then
fs.CreateFolder checkpfad
sys_ordner = sys_ordner + 1
End If
Next
End Sub
Kann mir jemand helfen?
Thanks
Weissertiger
' Zähler:
sys_kopiert = 0
sys_aktuell = 0
sys_ordner = 0
'SYS: Microsoft (r) Script Runtime
Set fs = CreateObject(Scripting.FileSystemObject)
'SYS: Windows Script Host Runtime Library
Set wshshell = CreateObject(WScript.Shell)
' In diesem Ordner liegen die Originaldaten:
' Sie könnten auch einen festen Ordnernamen angeben
' z.B. originale = C:\wichtige dinge
originale = wshshell.SpecialFolders(mydocuments)
' Hier sollen die Sicherungskopien gespeichert werden:
ziel = c:\temp\backup
PruefeKonventionen
MsgBox Starte Backup, sobald Sie auf OK klicken!
SichereOrdner originale, ziel
list = Backup abgeschlossen. Ergebnis: & vbCr
list = list & sys_kopiert & Dateien kopiert. & vbCr
list = list & sys_aktuell & Dateien waren aktuell und wurden nicht kopiert. & vbCr
list = list & sys_ordner & Ordner wurden neu angelegt.
MsgBox list, vbInformation
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
Sub SichereOrdner(pfad, ziel)
-> sichert einen Ordner
If Not fs.FolderExists(pfad) Then
MsgBox Ordner & pfad & existiert nicht!
Exit Sub
End If
Set ordner = fs.GetFolder(pfad)
For each datei in ordner.Files
-> Das Skript nimmt den Originalpfad der zu sichernden
-> Datei und ersetzt darin lediglich den Originalordner
-> durch den Zielordner
zielpfad = Replace(datei.Path, originale, ziel)
-> wie lautet der reine Ordnername? Dazu wird der Dateiname
-> entfernt.
zielordner = Left(zielpfad, InStrRev(zielpfad, \))
-> wenn der Zielordner noch nicht existiert, wird er
-> angelegt:
If Not fs.FolderExists(zielordner) Then
LegeOrdnerAn zielordner
End If
-> gibt es die Datei im Backupordner nicht? Dann anlegen!
If Not fs.FileExists(zielpfad) Then
datei.Copy zielordner
sys_kopiert = sys_kopiert + 1
Else
-> hat sich die Datei verändert? Ist Archiv-Bit gesetzt?
If (datei.Attributes And 32)<>0 Then
datei.Copy zielordner
sys_kopiert = sys_kopiert + 1
Else
sys_aktuell = sys_aktuell + 1
End If
End If
-> Attribut auf jeden Fall scharf stellen, also löschen
-> damit Änderungen beim nächsten Backup sichtbar werden
-> und unveränderte Dateien nicht ein zweites Mal kopiert werden
datei.Attributes = datei.Attributes And Not 32 And Not (8+16+64+128)
Next
-> Damit auch die Unterordner gesichert werden,
-> ruft sich diese Prozedur einfach selbst für alle Unterordner
-> auf (rekursiver Aufruf)
For each unterordner in ordner.SubFolders
-> Diesen Ordner im Backup-Verzeichnis anlegen
-> dazu wieder Originalordner ersetzen durch Zielordner
LegeOrdnerAn Replace(unterordner.Path, originale, ziel)
-> Diesen Unterordner ebenfalls sichern
SichereOrdner unterordner.Path, ziel
Next
End Sub
Sub LegeOrdnerAn(pfad)
If Right(pfad,1) = \ Then
neuerpfad = Left(pfad, Len(pfad)-1)
Else
neuerpfad = pfad
End If
anteile = Split(neuerpfad, \)
For each anteil in anteile
checkpfad = checkpfad & anteil & \
If Not fs.FolderExists(checkpfad) Then
fs.CreateFolder checkpfad
sys_ordner = sys_ordner + 1
End If
Next
End Sub
Kann mir jemand helfen?
Thanks
Weissertiger