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!!)
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 96539
Url: https://administrator.de/contentid/96539
Ausgedruckt am: 26.11.2024 um 06:11 Uhr
5 Kommentare
Neuester Kommentar
Moin,
hab da noch tief in meinen Programmen was gefunden:
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:
Hoffe, das hilft etwas.
Log's bekommst du schon hin ;)
Gruß,
Henrik
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
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
Log's bekommst du schon hin ;)
Gruß,
Henrik