VBS funktioniert nicht richtig!!!

  • #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
 
  • #2
also bei mir werden zwar die ordner angelegt, dafür werden die dateien aber alle ins root vom backup-folder gelegt.

ist jetzt zwar keine problemlösung, aber vieleicht nen hinweis.

gruß
nico
 
  • #3
Hallo zusammen!

Auf einem anderen Compi habe ich das gleiche Problem wie Nico.
Die Ordner erstellts zwar, aber die Dateien kopierts alle ins root.

Weiss jemand wo das Problem liegen könnte.

Danke und Gruss
Weissertiger
 
  • #4
Hi

Bei diesem Code weiss ich nicht so genau, aber da ist irgentwie keine Funktion eingebaut, die die Unterordner scannt.

Mfg Alexander
 
  • #5
Alexander16 schrieb:
... da ist irgentwie keine Funktion eingebaut, die die Unterordner scannt...

doch schon:
->Damit auch die Unterordner gesichert werden
...
For each unterordner in ordner.SubFolders
...
Next

wo kommt der code eigentlich her?
 
  • #6
Hi

Dort werden aber nur die Ordner angelegt, aber nicht nach den enthaltenen Dateien gescannt.

Mfg Alexander
 
  • #7
Hallo

Das Script habe ich von einem Buch. Welches diverse Beispiele auf CD hatte. Scripting für Administratoren.

Deshalb hat es mich erstaunt, dass es nicht richtig funktioniert.

Greetz
Weissertiger
 
Thema:

VBS funktioniert nicht richtig!!!

ANGEBOTE & SPONSOREN

Statistik des Forums

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