chrizz-at
Goto Top

Brauche spezielles Backup Script!

Liebe Gemeinde, ich brauche unbedingt hilfe bei einem Kopier/Backupscript in der Sprache VBScript. Es soll einen Ordner, seine Unterordner und die darin liegenden Dateien (Also einen ganzen Verzeichnisbaum) von A nach B kopieren. (Das heisst die Ordner auch als Abbild vom Quellverzeichnisbaum ins Ziel erstellen)
Und dies einzeln und auf jeden fall Rekursiv! Da es eine ErrorMessage ausgeben soll falls eine Datei nicht kopiert werden konnte.
Es soll auch ausgeben welche Dateien und Ordner tatsächlich kopiert wurden.


Hier mein Anfang: (bei 'Files kopieren weis ich nicht mehr weiter!!)

Option Explicit
' Aufruf der Routine  
' Konstanten definieren  
Const srcDir = "C:\Addon"  
Const destDir = "D:\Temp"  

Dim log
Dim errorLog
log = ""  
errorLog = ""  

ListeVerzeichnisseRek srcDir, destDir, 1
Wscript.echo log
Wscript.echo errorlog

Private Sub AddLog(logLine)
	log = log + logLine+CHR(13)
End Sub

Private Sub AddErrorlog(logLine)
	errorlog = errorlog + logLine+CHR(13)
End Sub

private Sub ListeVerzeichnisseRek(srcDir, destDir, tiefe)
	On Error Resume Next
	' Deklaration der Variablen  
	Dim FSO, Verzeichnis, UnterVerzeichnis
	' Objekt erzeugen  
	Set FSO = CreateObject("Scripting.FileSystemObject")  
	
	'  Wenn das Verzeichnis existiert  
	If FSO.FolderExists(srcDir) and (tiefe < 4) then
		AddLog srcDir + " -> " + destDir  
	End if
	
	' Referenz auf Verzeichnis  
	Set Verzeichnis = FSO.GetFolder(srcDir)
	
	'Files kopieren  
	
	
		if Err.Number <> 0 then
			addErrorLog("Es ist ein Fehleraufgetreten.")  
			addErrorLog(vbTab & "Fehlernummer: " & Err.Number)  
			addErrorLog(vbTab & "Beschreibung: " & Err.Description & vbCrLf)  
			addErrorLog(Err.Description)
			Err.Clear
		End if
	Next
		'Alle Unterverzeichnisse auflisten  
	For Each UnterVerzeichnis in Verzeichnis.Subfolders
			' Erneuter Aufruf mit dem Unterverzeichnis  
			ListeVerzeichnisseRek UnterVerzeichnis, destDir & "\" & UnterVerzeichnis.Name, tiefe + 1  
	Next
End Sub



Falls jemand sowas schon hat, wäre ich sehr dankbar wenn er das Script posten könnte. Bin noch ein Anfänger und es wird mir irgendwie schon zu schwierig!


Lg Chris

Content-ID: 96539

Url: https://administrator.de/contentid/96539

Ausgedruckt am: 26.11.2024 um 06:11 Uhr

Iwan
Iwan 10.09.2008 um 10:26:37 Uhr
Goto Top
hallo,

warum MUSS es unbedingt VBS sein? robocoy z.B. kopiert das ganze im Batchmodus und man kann sich ein schönes Log dazu erstellen lassen
wakko
wakko 10.09.2008 um 13:35:05 Uhr
Goto Top
Moin,

hab da noch tief in meinen Programmen was gefunden:
Function fct_ListAllFiels(strinPath As String)
Dim flag As Boolean, vadd() As String
strinPath = fct_BackSlash(strinPath)
'Gibt die Namen aller Dateien inklusive Pfad aus einem übergebenen Verzeichnisses sowie  
' aus allen Unterverzeichnisse in einem String-Array zurück  
Dim f, fs, fc, f1, fsub, strName As String, i As Integer, v() As String, j%
Set fs = CreateObject("Scripting.FileSystemObject")  
If fs.FolderExists(strinPath) Then
   Set f = fs.GetFolder(strinPath)
   Set fc = f.Files
   i = 0
   flag = True
   For Each f1 In fc
        strName = f1.Name
        ReDim Preserve v(0 To i)
        v(i) = strinPath & "\" & strName  
        i = i + 1
   Next
   If f.SubFolders.Count > 0 Then
      For Each fsub In f.SubFolders
          'rekursiver Aufruf für Unterordner  
          vadd = fct_ListAllFiels(strinPath & "\" & fsub.Name)  
          For j = 0 To UBound(vadd)
              ReDim Preserve v(0 To i)
              v(i) = strinPath & "\" & fsub.Name & "\" & vadd(j)  
              i = i + 1
          Next
      Next
   End If
End If
fct_ListAllFiels = v
End Function
Gibt ein Array mit allen Dateien zurück. Ist eigentlich VB, müsste als VBScript jetzt auch laufen (habe da Kleinigkeiten angepasst).
Noch nicht wirklich getestet, also bitte vorsicht.
Du müsstest also nur noch durchs Array flitzen, als Ziel source mit dest vertauschen und fertig. Also quasi so oder ähnlich:
sub copyfiles(source, dest)
dim v, i%
v = fct_ListAllFiles(souce)
for i = 0 to ubound(v)
    filecopy v(i) replace(v(i), source, dest)
Next
End sub
Hoffe, das hilft etwas.
Log's bekommst du schon hin ;)
Gruß,
Henrik
chrizz-at
chrizz-at 11.09.2008 um 09:16:58 Uhr
Goto Top
Warum es VBS sein muss? Weil das Script nur im Hintergrund laufen soll und kopieren, und soll auch logs ausgeben. (Ist für einen Kunden von uns)

Für Error und die Daten die tatsächlich kopiert wurden..

lg
Iwan
Iwan 11.09.2008 um 14:14:51 Uhr
Goto Top
wie gesagt, robocopy kann das alles, aber mit VBS? sorry
chrizz-at
chrizz-at 11.09.2008 um 14:47:02 Uhr
Goto Top
Habe es sogut wie fertig.. Es kopiert alle Dateien einzeln (rekursiv) und erstellt die Ordner für den Zielort! Wenn etwas nicht kopiert werden kann schreibt es eine Logfile und kopiert weiter..

Ich kann es morgen reinstellen wer es haben will!

lg chris