Hallo zusammen,
ich habe ein Skript welches Daten von A nach B kopiert. Die zu kopierenden Daten sind in der Ini zusammengefasst. Im Moment sind dort 40 Pfade eingetragen, diese können nach Belieben erweitert werden.
Zum Kopieren verwenden ich die FileCopyEx Funktion von Oscar. Das Ganze funktioniert soweit perfekt.
Nun zu dem Problem welches ich habe. Die Funktion generiert für jeden Eintrag in der Ini ein neues Array. Das führt jedoch zu Problemen beim Abbruch des Kopiervorgangs, da ich ab der Stelle alle nachfolgenden Kopieraktionen abbrechen muss.
Ich habe mit Hilfe von Google und AutoIt versucht das Ganze in ein Großes Array zu packen, leider ohne Erfolg.
Hier im Forum habe ich einen Ansatz dazu gefunden, es gelingt mir jedoch nicht den Code von Barbene03 an meine Bedürfnisse anzupassen. Array Dir Copy with Progressbar (#4)
Func _Backup()
Global $q_Array = IniReadSection($ini, "Quellen")
Global $z_Array = IniReadSection($ini, "Ziel")
Global $Backup_Ziel_Verzeichnis = ($z_Array[1][1])
;; Exclude Files & Dirs from Backup
Global $Exclude_files = IniRead($ini, "Exclude_Files", "Files", "default")
Global $Exclude_Dir = IniRead($ini, "Exclude_Dir", "Dirs", "default")
For $i = 1 To $q_Array[0][0]
$array_Quelle = ($q_Array[$i][1])
$Quell_Verzeichnis = StringReplace($array_Quelle, "*Userprofil*", @UserProfileDir)
$Quell_Laufwerk = StringLeft($Quell_Verzeichnis, 3)
$Quell_Buchstabe = StringLeft($Quell_Verzeichnis, 1)
$Backup_Ziel = StringReplace("Drive_" & $Quell_Verzeichnis, ":", "")
$Backup_Ziel_Pfad = ($Backup_Ziel_Verzeichnis & "\" & $Backup_Ziel)
$Ziel = ($Backup_Ziel_Pfad)
Sleep(1000)
Global $sSourceDir = $Quell_Verzeichnis ; alle Dateien aus diesem Verzeichnis sollen kopiert werden
Global $sDestDir = $Ziel ; die Quelldateien sollen (mit Unterverzeichnissen) in dieses Verzeichnis kopiert werden
Global $aSourceFiles[1], $aDestDir[1]
If GUICtrlRead($Outlook) = "1" Then ;; Sicherung inkl. PST Dateien
;; '*|*.ost|Ordner' Ordner welche nicht kopiert werden sollen
_FileCopyEx_CreateArrays($sSourceDir, $sDestDir, $aSourceFiles, $aDestDir, '*|' & $Exclude_files & '|' & $Exclude_Dir & "'") ; diese Funktion erstellt die Arrays für _FileCopyEx
ElseIf GUICtrlRead($Outlook) = "4" Then ;; Sicherung ohne PST Dateien
;; '*|*.ost|Ordner' Ordner welche nicht kopiert werden sollen
_FileCopyEx_CreateArrays($sSourceDir, $sDestDir, $aSourceFiles, $aDestDir, '*|*.pst' & $Exclude_files & '|' & $Exclude_Dir & "'") ; diese Funktion erstellt die Arrays für _FileCopyEx
EndIf
If Not @error Then
Global $sLog = _FileCopyEx($aSourceFiles, $aDestDir, 16 + 8 + 2 + 1, 'Dateien kopieren...') ; hier erfolgt dann das kopieren
ConsoleWrite('Fehler: ' & @error & @CRLF)
ConsoleWrite($sLog & @CRLF)
Global $Backuplog = (@UserProfileDir & '\_Datenaufnahme')
$boottime = _DateAdd('s', -Int(_Date_Time_GetTickCount() / 1000), _NowCalc())
$date = @MDAY & "." & @MON & "." & @YEAR
FileWrite($Backuplog & "\_Log_" & $date & ".txt", "____________________________________________ Sicherung __________________________________________")
FileWrite($Backuplog & "\_Log_" & $date & ".txt", @CRLF)
FileWrite($Backuplog & "\_Log_" & $date & ".txt", @CRLF)
FileWrite($Backuplog & "\_Log_" & $date & ".txt", "Start Logging: " & @HOUR & ":" & @MIN & ":" & @SEC & " Uhr " & " - " & "Datum: " & $date & @CRLF)
FileWrite($Backuplog & "\_Log_" & $date & ".txt", "_________________________________________________________________________________________________" & @CRLF)
FileWrite($Backuplog & "\_Log_" & $date & ".txt", 'Fehler: ' & @error & @CRLF)
FileWrite($Backuplog & "\_Log_" & $date & ".txt", $sLog & @CRLF)
EndIf
Next
DirCopy(@UserProfileDir & "\_Datenaufnahme", $Backup_Ziel_Verzeichnis & "\_Datenaufnahme", $FC_OVERWRITE)
FileCopy(@AppDataDir & "\myBackup\myBackup.ini", $Backup_Ziel_Verzeichnis & "\_Datenaufnahme\")
Local $sString = StringLeft($Backup_Ziel_Verzeichnis, 3)
;~ FileCopy(@ScriptDir & "\Datenaufnahme.exe", $sString & "\Datenaufnahme.exe")
FileCopy(@ScriptDir & "\myBackup - Kopie.exe", $sString & "\myBackup.exe", $FC_OVERWRITE)
If Not FileExists($Backup_Ziel_Verzeichnis & "UserProfileDir.txt") Then
FileWrite($Backup_Ziel_Verzeichnis & "_UserProfileDir.txt", @UserProfileDir)
Sleep(1000)
_Stop_Proggress()
If Not @error Then
$Fehler = "Sicherung beendet! (Keine Fehler!)"
Else
$Fehler = "Sicherung beendet! (Es sind Fehler aufgetreten, näheres im Log.)"
EndIf
_ExtMsgBoxSet(-1, 4, -1, -1, 11, "Calibri", 900)
$sMsg = $Fehler & @CRLF & @CRLF
$sMsg &= "Schließen Sie myBackup." & @CRLF & @CRLF
$sMsg &= "Vor dem herausziehen, deaktivieren Sie den USB-Stick." & @CRLF & @CRLF
$sMsg &= "Wählen Sie 'Hardware sicher entfernen' (USB-Symbol) rechts unten in der Taskleiste." & @CRLF & @CRLF & @CRLF
$sMsg &= "Rücksicherung:" & @CRLF & @CRLF
$sMsg &= "Diese kann per myBackup oder manuell erfolgen." & @CRLF & @CRLF
$sMsg &= "Starten Sie 'myBackup' von diesem USB-Stick. " & @CRLF & @CRLF
$sMsg &= "" & @CRLF & @CRLF
$sMsg &= "Eine Anleitung zum einbinden der Persönlichen Ordner und Drucker finden Sie in der 'Datenaufnahme'." & @CRLF & @CRLF
$iRetValue = _ExtMsgBox(0, "OK", "Sicherung beendet!", $sMsg)
_ExtMsgBoxSet(Default)
EndIf
EndFunc ;==>_Backup
Alles anzeigen
Die Ini ist wie folgt aufgebaut:
[Quellen]
01=d:\Documents\Desktop
02=d:\Documents
03=C:\Users\Mitac\Downloads
04=C:\Users\Mitac\Favorites
05=C:\Users\Mitac\Music
06=C:\Users\Mitac\Pictures
07=C:\Users\Mitac\Videos
08=C:\Users\Mitac\Links
09=C:\Users\Mitac\Documentum
10=C:\Users\Mitac\Kontakte
11=C:\Users\Mitac\_Datenaufnahme
12=C:\Users\Mitac\AppData\Local\Microsoft\OneNote
13=C:\Users\Mitac\AppData\Local\Microsoft\FORMS
Vielleicht kann mir jemand von Euch ein paar Zeilen Code zur Verfügung stellen mit der sich das realisieren lässt.
Im Voraus vielen Dank. Mitac