Hallo,
ich hab ein kleines Tool dass dazu gedacht ist Userprofile zu sichern und auf anderen Geräten wieder herzustellen. Das war auch recht lange im Einsatz aber es kamen immer wieder mal welche dazu, andere weg usw.
also war die Idee das alles dynamisch zu machen und die zu sichernden Dateien/ Verzeichnisse in einer ini-Datei zu schreiben und da auszulesen.
Jetzt habe ich aber glaube ich das Problem dass ich nicht zwischen Dateien und Verzeichnissen unterscheiden kann.
Die Idee war von rechts alles bis zum \ abzuschneiden um das Restore Verzeichnis der jeweiligen Datei zu ermitteln, aber das geht ja dann auch nicht weil ich dann auch die Zielverzeichnisse von den wiederherzustellenden Verzeichnissen abschneide.
Hat jemand eine zündende Idee?
Das Script:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=backup.ico
#AutoIt3Wrapper_Outfile=Backup_Restore.exe
#AutoIt3Wrapper_Res_Description=Backup und Restore Tool
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_Add_Constants=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
DirCreate(@Scriptdir &"\Data\")
FileInstall("backup.jpg",@Scriptdir &"\Data\backup.jpg",1)
FileInstall("backup.ico",@Scriptdir &"\Data\backup.ico",1)
FileInstall("7za.exe",@Scriptdir &"\7za.exe",1)
#Region ### START Koda GUI section ### Form=c:\autoit\backup restore\backup_restore.kxf
$Form1_1 = GUICreate("Client Backup", 515, 301, 268, 172,BitOR($WS_SIZEBOX,$WS_THICKFRAME,$WS_SYSMENU,$WS_POPUP))
GUISetBkColor(0xFFFFFF)
GUISetIcon(@ScriptDir &"\Data\backup.ico", -1)
$Pic1 = GUICtrlCreatePic(@ScriptDir &"\Data\backup.jpg", 400, 10, 100, 80)
$btnBackup = GUICtrlCreateButton("Backup", 16, 255, 125, 40, $BS_NOTIFY)
GUICtrlSetState($btnBackup,$GUI_DISABLE)
GUICtrlSetFont(-1, 11, 800, 0, "Arial")
$btnRestore = GUICtrlCreateButton("Restore", 374, 255, 125, 40, $BS_NOTIFY)
GUICtrlSetState($btnRestore,$GUI_DISABLE)
GUICtrlSetFont(-1, 11, 800, 0, "Arial")
$Edit1 = GUICtrlCreateEdit("", 16, 112, 480, 121, $ES_READONLY)
GUICtrlSetFont(-1, 10, 400, 0, "Arial")
GUICtrlSetData(-1, StringFormat("Um Backups zu erstellen muss durch das Häkchen unten bestätigt werden dass \r\ndie ini- Datei (backup_restore.ini), im Programmverzeichnis dieses Tools, korrekt \r\nist oder entsprechend angepasst wurde.\r\nWie diese Datei zu editieren ist, ist durch Kommentare in der ini-Datei erklärt.\r\n\r\nDas Zielverzeichnis ist ist Standardmäßig er Programmpfad dieses Tools, kann \r\naber ebenfalls in der ini-Datei angepasst werden.\r\n"))
$Label1 = GUICtrlCreateLabel("Backup- Restore- Tool", 16, 16, 314, 38, $SS_CENTER)
GUICtrlSetFont(-1, 22, 800, 0, "Arial")
GUICtrlSetColor(-1, 0x000000)
$chk_ini = GUICtrlCreateCheckbox("*.ini Datei korrekt/angepasst.", 168, 255, 180, 17)
GUICtrlSetFont(-1, 10, 450, 0, "Arial")
GUICtrlSetColor(-1, 0xFF0000)
$Label2 = GUICtrlCreateLabel("Infrastruktur-Edition :o)", 16, 64, 152, 20)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
$Label3 = GUICtrlCreateLabel("Abbrechen oder schliessen mit [ESC]", 168, 280, 178, 17)
GUICtrlSetState($Label3, $GUI_DISABLE )
$Progress1 = GUICtrlCreateProgress(16, 234, 480, 17)
GUICtrlSetState($Progress1, $GUI_HIDE )
$btn_delete = GUICtrlCreateButton("Backup Dateien löschen und beenden", 16, 255, 483, 45)
GUICtrlSetFont(-1, 12, 800, 0, "Arial")
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlSetState($btn_delete, $GUI_HIDE )
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
#EndRegion ### END Koda GUI section ###
If Not FileExists(@ScriptDir &"\backup_restore.ini") Then
MsgBox (16, "ini-Datei nicht gefunden", "backup_restore.ini wurde nicht gefunden, Programm wird beendet!")
Exit
EndIf
Global $qArray = IniReadSection(@ScriptDir &"\backup_restore.ini", "Quellen")
Global $z_Array = IniReadSection(@ScriptDir &"\backup_restore.ini", "Ziel")
$Elemente=UBound($qArray)
$xtel = 100/$Elemente
Global $Zielverzeichnis = ($z_Array[1][1] )
If $Zielverzeichnis = "@ScriptDir" Then
$Zielverzeichnis= StringReplace($Zielverzeichnis,"@ScriptDir",@ScriptDir)
$Zielverzeichnis= ($Zielverzeichnis &"Backup\")
MsgBox(0,"$Zielverzeichnis",$Zielverzeichnis)
EndIf
If FileExists($Zielverzeichnis) Then
GUICtrlSetState($btnRestore,$GUI_ENABLE)
GUICtrlSetData($Edit1, StringFormat("\r\n\r\n\r\nBackup in Zielverzeichnis vorhanden. Restore möglich."))
EndIf
HotKeySet("{ESC}", "_Terminate")
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Case $chk_ini
GUICtrlSetState($btnBackup,$GUI_ENABLE)
GUICtrlSetState($btnRestore,$GUI_ENABLE)
GUICtrlSetState($chk_ini,$GUI_DISABLE)
GUICtrlSetData($Edit1, StringFormat("\r\n\r\n\r\nJetzt kann es los gehen :)"))
Case $btnBackup
_Backup()
Case $btnRestore
_Restore()
Case $btn_delete
DirRemove($Zielverzeichnis,1)
GUICtrlSetData($Edit1, StringFormat("\r\n\r\n\r\nBackup Dateien gelöscht."))
Sleep(1000)
Exit
EndSwitch
WEnd
;-------------------------------------------------------------------------------------------------------------------------------------------------------------
Func _Backup()
GUICtrlSetState($btnBackup,$GUI_DISABLE)
GUICtrlSetState($btnRestore,$GUI_DISABLE)
GUICtrlSetData($Edit1, StringFormat("\r\n\r\n\r\nBitte warten,\r\nBackup wird erstellt."))
$fortschritt = 0
For $i = 1 To $qArray[0][0]
$a_Quelle = ($qArray[$i][1])
$Quellverzeichnis = StringReplace($a_Quelle, "*Userprofil*", @UserProfileDir)
$Quell_Laufwerk = StringLeft($Quellverzeichnis,3)
$Quell_Buchstabe = StringLeft($Quellverzeichnis,1)
$ZielShare = StringReplace($Quellverzeichnis, ":", "")
$strZiel = ( $Zielverzeichnis & $ZielShare)
$Ziel = StringReplace($strZiel, "*Userprofil*", @UserProfileDir)
Sleep(1000)
$fortschritt = $fortschritt + $xtel
GUICtrlSetState($Progress1, $GUI_SHOW)
GUICtrlSetData($Edit1, StringFormat("\r\n\r\n\r\n" & $Quellverzeichnis & " wird gesichert."))
GUICtrlSetData($Progress1, ($fortschritt))
;~ $Str = ("String: " & @ScriptDir &"\"& "7za.exe a -tzip " &'"'& $Ziel & ".zip"&'"' & " " &'"'& $Quellverzeichnis &"\*" &'"')
RunWait (@ScriptDir &"\"& "7za.exe a -tzip " &'"'& $Ziel & ".zip"&'"' & " " &'"'& $Quellverzeichnis &"*" &'"',"",@SW_HIDE)
Next
GUICtrlSetData($Progress1, 100)
Sleep(500)
GUICtrlSetColor($Edit1, 0x008000)
FileWrite($Zielverzeichnis & "UserProfileDir.txt",@UserProfileDir)
GUICtrlSetData($Edit1, StringFormat("\r\n\r\n\r\nBackup abgeschlossen.\r\n\r\nSchließen mit [ESC]"))
;~ GUICtrlSetState($btnBackup,$GUI_ENABLE)
GUICtrlSetState($btnRestore,$GUI_ENABLE)
EndFunc
;-------------------------------------------------------------------------------------------------------------------------------------------------------------
Func _Restore()
GUICtrlSetState($btnBackup,$GUI_DISABLE)
GUICtrlSetState($btnRestore,$GUI_DISABLE)
GUICtrlSetData($Edit1, StringFormat("\r\n\r\n\r\nBitte warten,\r\nRestore wird durchgeführt."))
$fortschritt = 0
For $i = 1 To $qArray[0][0]
$Backup_pfad= FileRead($Zielverzeichnis & "UserProfileDir.txt")
$a_Quelle = ($qArray[$i][1])
$Quellverzeichnis = StringReplace($a_Quelle, "*Userprofil*", $Backup_pfad)
$Quell_Buchstabe = StringLeft($Quellverzeichnis,1)
$ZielShare = StringReplace($Quellverzeichnis, ":", "")
$Restore_Pfad = StringLeft($Quellverzeichnis,StringInStr($Quellverzeichnis,'\',0,-1))
MsgBox(0,"$Restore_Pfad",$Restore_Pfad)
$strZiel = ( $Zielverzeichnis & $ZielShare)
;~ MsgBox(0,"$strZiel",$Zielverzeichnis &"|"& $ZielShare)
$Ziel = StringReplace($strZiel, "*Userprofil*", @UserProfileDir)
MsgBox(0,"$Ziel",$Ziel)
Sleep(500)
$fortschritt = $fortschritt + $xtel
GUICtrlSetState($Progress1, $GUI_SHOW)
$Restore_Str = (@ScriptDir &"7za.exe x " & $Ziel & ".zip" & " " &"-aoa -o"&'"'&$Restore_Pfad&'"')
MsgBox(0,"restore_String", $Restore_Str)
GUICtrlSetData($Edit1, StringFormat("\r\n\r\n\r\n" & $Quellverzeichnis & " wird wiederhergestellt."))
GUICtrlSetData($Progress1, ($fortschritt))
RunWait (@ScriptDir &"\7za.exe x " &'"'& $Ziel &'"'& ".zip" & " " &"-aoa -o"&'"'&$Restore_Pfad&'"',"",@SW_HIDE )
Next
GUICtrlSetData($Progress1, 100)
Sleep(500)
GUICtrlSetColor($Edit1, 0x008000)
GUICtrlSetData($Edit1, StringFormat("\r\n\r\n\r\nRestore abgeschlossen."))
GUICtrlSetState($btnBackup,$GUI_HIDE)
GUICtrlSetState($btnRestore,$GUI_HIDE)
GUICtrlSetState($Label3,$GUI_HIDE)
GUICtrlSetState($chk_ini,$GUI_HIDE)
GUICtrlSetState($btn_delete,$GUI_SHOW )
EndFunc
;-------------------------------------------------------------------------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------------------------------------------------------------------------
; Exitus
Func _Terminate()
Exit 0
EndFunc ;==>_Terminate
Alles anzeigen
Die ini Datei
#----------------------------------------------------------------------------------------------------------------------
# In dieser Datei werden die zu sichernden Pfade festgelegt die mit dem Backup_restore- Tool gesichert werden sollen
#----------------------------------------------------------------------------------------------------------------------
#----------------------------------------------------------------------------------------------------------------------
# Quellen
#----------------------------------------------------------------------------------------------------------------------
[Quellen]
#----------------------------------------------------------------------------------------------------------------------
# OHNE abschliessendem Backslash \
# in ini Dateien gibt es keine Systemvariablen!
# Ordner im Userprofil bitte so angeben: *Userprofil*\Desktop
#----------------------------------------------------------------------------------------------------------------------
1=*Userprofil*\Pictures
2=*Userprofil*\Desktop
3=*Userprofil*\Documents
4=*Userprofil*\Favorites
5=*Userprofil*\Contacts
6=*Userprofil*\Searches
7=*Userprofil*\AppData\Roaming\Microsoft\Signatures
8=*Userprofil*\AppData\Roaming\Avaya
9=*Userprofil*\AppData\Roaming\Microsoft\Templates
10=*Userprofil*\AppData\Roaming\Microsoft\Outlook
11=*Userprofil*\AppData\Roaming\Microsoft\Document Building Blocks
12=*Userprofil*\AppData\Roaming\Microsoft\Sticky Notes
13=*Userprofil*\AppData\Roaming\Mozilla\Firefox\Profiles
14=C:\Program Files (x86)\System\-Analyser.mdb
15=C:\Program Files (x86)\System\Dokumente
#----------------------------------------------------------------------------------------------------------------------
# Ziel
#----------------------------------------------------------------------------------------------------------------------
[Ziel]
#----------------------------------------------------------------------------------------------------------------------
# OHNE abschliessendem Backslash \
# Standardwert ist @ScriptDir, also das Verzeichnis in dem die Backup_restore.exe liegt (USB-Stick o.ä.)
#----------------------------------------------------------------------------------------------------------------------
1=@ScriptDir
Alles anzeigen
Vermutlich gibt es ne einfache Lösung auf die ich nur nicht komme