Backup VBS läuft nicht

  • #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
 
  • #2
Ersetze mal die Zeile

zielpfad = Replace(datei.Path, pfad, ziel)

durch

zielpfad = ziel & \ & datei.Name
 
  • #3
wenn ich für mydocuments wie im File Beschrieben einen Ordner C:\temp\test nehme

Code:
' In diesem Ordner liegen die Originaldaten:
' Sie könnten auch einen festen Ordnernamen angeben
' z.B. originale = C:\wichtige dinge
originale = wshshell.SpecialFolders(mydocuments)

wshshell.SpecialFolders kann nur mit Spezial-Ordnern benutzt werden:

AllUsersDesktop
AllUsersStartMenu,
AllUsersPrograms
AllUsersStartup
Desktop
Favorites
Fonts
MyDocuments
NetHood
PrintHood
Programs
Recent
SendTo
StartMenu
Startup
Templates

Du kannst daher nicht einfach den->mydocuments'-Teil ändern, sondern musst die ganze Zeile anpassen:
Code:
originale = C:\temp\test
statt:
Code:
originale = wshshell.SpecialFolders(mydocuments)
 
  • #4
BeyondTheSilence schrieb:
Du kannst daher nicht einfach den->mydocuments'-Teil ändern, sondern musst die ganze Zeile anpassen:
Code:
originale = C:\temp\test
statt:
Code:
originale = wshshell.SpecialFolders(mydocuments)

Ich denke mal, das hat er auch so gemacht. Doch genau so funktioniert es nicht. Die Replace-Funktion in Zeile 53 greift in diesem Falle nicht.
 
  • #5
@JanaS
Lasse ich mydocuments drin, funktioniert das Script, und es kopiert die ganzen Files in den Backup Ordner.
Dann würds aber mit dem->mydocuments' auch nicht funktionieren ....

So wie er es formuliert hat er nämlich gerade dies nicht gemacht.
wenn ich für mydocuments wie im File Beschrieben einen Ordner C:\temp\test nehme
 
  • #6
Ich habe das Skript getestet, bevor ich antwortete.
Du kannst mir gerne glauben.
 
  • #7
Hello zusammen

@JanaS
Danke für den Tipp hat funktioniert!

@BeyondTheSilence
Das habe ich gewusst, und habe es auch so ersetzt, funktioniert aber nicht! Habe die Beschreibung vielleicht ein bisschen falsch formuliert.

Also ich versuche es nochmals:
Wenn ich es so stehen lassen, wie im ersten Posting, dann funktioniert es! Wenn ich aber die Zeile mit mydocuments ersetze mit originale = C:\temp\test hat es nicht funktioniert!

Aber nun mit dem Tipp von JanaS funktioniert es.
Danke für Eure Hilfe.

Greetings Weissertiger
 
Thema:

Backup VBS läuft nicht

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben