- #1
W
Weissertiger
Bekanntes Mitglied
Themenersteller
- Dabei seit
- 04.11.2003
- Beiträge
- 46
- Reaktionspunkte
- 0
Hallo zusammen
Kann mir jemand helfen, mein VBS funktioniert nicht richtig.
Die Dateien kopiert es alle, aber ohne einen Unterordner zu erstellen.
z.B. C:\Temp hat drei Unterordner mit diverses Dateien, und ich möchte diese auf ein Serverlaufwerk speichern.
Hier mein Script:
' 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 = C:\Temp
' Hier sollen die Sicherungskopien gespeichert werden:
ziel = U:\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 = ziel & \ & datei.Name
zielpfad = Replace(datei.Path, pfad, 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
Hoffe jemand kann mir helfen.
Thx Weissertiger
Kann mir jemand helfen, mein VBS funktioniert nicht richtig.
Die Dateien kopiert es alle, aber ohne einen Unterordner zu erstellen.
z.B. C:\Temp hat drei Unterordner mit diverses Dateien, und ich möchte diese auf ein Serverlaufwerk speichern.
Hier mein Script:
' 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 = C:\Temp
' Hier sollen die Sicherungskopien gespeichert werden:
ziel = U:\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 = ziel & \ & datei.Name
zielpfad = Replace(datei.Path, pfad, 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
Hoffe jemand kann mir helfen.
Thx Weissertiger