Hey,
Ich wollte euch mal mein Sichrungstoll Vorstellen und gleich mit meinem neuen Problem bekannt machen und um eure Hilfe bitten.
Hinzufügen und entfernen Funktioniert
Sichern Funktioniert
Ini wegschreiben funktioniert
task funktion bin noch beim srvany "fast fertig"
Jetzt geht es zu meinem Problem Restore:
So sieht meine Verzeichnis Struktur aus:
\%backupordner%\aktuellesdatum\log.ini
\%backupordner%\aktuellesdatum\ordner1
\%backupordner%\aktuellesdatum\ordner2
\%backupordner%\aktuellesdatum\ordner3
\%backupordner%\aktuellesdatum\log.ini
\%backupordner%\aktuellesdatum\ordner1
\%backupordner%\aktuellesdatum\ordner2
\%backupordner%\aktuellesdatum\ordner3
jetzt will ich alle ordner die im %backupordner% liegen in der Treeview Darstellen die eine Log.ini im root Verzeichnis haben.
so sieht meine log.ini aus:
[Quelle-Ziele]
c:\apps\test=f:\backup\29.09.2009
c:\apps\test2=f:\backup\29.09.2009
c:\apps\test3=f:\backup\29.09.2009
c:\apps\test4=f:\backup\29.09.2009
c:\apps\test5=f:\backup\29.09.2009
Jetzt zu meinem Problem
1.wie mache ich das alle order in einer Treeview darzustellen die eine log.ini im root verzeichnis haben "\%backupordner%\aktuellesdatum\" darzustellen?
2.Wie mache er dann den Ordner den ich anklicke das er dann die ini einliest damit er die daten,
wieder dort hin kopiert woher die auch kamen also an die quelle:
Spoiler anzeigen
#include <ButtonConstants.au3>
#include <DateTimeConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <File.au3>
#include <Constants.au3>
#include <Date.au3>
#include <array.au3>
Local $arCheckBox[7]
Global $ini = @SystemDir & '\save.ini'
Global $path = @SystemDir & '\lastsave'
Global $hfile = @SystemDir & '\lastsave.log'
Global $line
$Form1 = GUICreate("Sicherung", 918, 600, 219, 121)
$Tab1 = GUICtrlCreateTab(16, 24, 873, 560)
GUICtrlSetResizing(-1, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
$TabSheet1 = GUICtrlCreateTabItem("Backup")
$arCheckBox[6] = GUICtrlCreateCheckbox("Montag", 24, 361, 57, 17)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
$arCheckBox[5] = GUICtrlCreateCheckbox("Dienstag", 88, 361, 57, 17)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
$arCheckBox[4] = GUICtrlCreateCheckbox("Mittwoch", 152, 361, 65, 17)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
$arCheckBox[3] = GUICtrlCreateCheckbox("Donnerstag", 224, 361, 73, 17)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
$arCheckBox[2] = GUICtrlCreateCheckbox("Freitag", 304, 361, 57, 17)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
$arCheckBox[1] = GUICtrlCreateCheckbox("Samstag", 368, 361, 57, 17)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
$arCheckBox[0] = GUICtrlCreateCheckbox("Sonntag", 432, 361, 65, 17)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
$Time = GUICtrlCreateDate('15:00', 24, 393, 70, 21, $DTS_TIMEFORMAT)
;GUICtrlCreateDate('00:00:00', 10, 10, 100, 30, $DTS_TIMEFORMAT)
$DTM_SETFORMAT_ = 0x1032
$style = "HH:mm"
GUICtrlSendMsg($Time, $DTM_SETFORMAT_, 0, $style)
$hListView = GUICtrlCreateListView("Quelle|Ziel", 24, 73, 850, 246)
GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 420)
GUICtrlSendMsg(-1, $LVSCW_AUTOSIZE_USEHEADER, 1, 420)
$hListView1 = GUICtrlCreateListView("Quelle|Ziel", 24, 420, 850, 150)
GUICtrlSendMsg($hListView1, $LVM_SETCOLUMNWIDTH, 0, 420)
GUICtrlSendMsg($hListView1, $LVSCW_AUTOSIZE_USEHEADER, 1, 420)
GUICtrlSendMsg(-1, 0x101E, 0, 50)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
$add = GUICtrlCreateButton("+", 24, 321, 75, 25)
GUICtrlSetFont(-1, 20, 400, 0, "Arial")
$del = GUICtrlCreateButton("-", 104, 321, 75, 25)
GUICtrlSetFont(-2, 20, 400, 0, "Arial")
$Task_Plannen = GUICtrlCreateButton("Task_Planen", 100, 390, 75, 25)
$Save = GUICtrlCreateButton("Save-Settings", 800, 49, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
$Quelle = GUICtrlCreateLabel("Quelle", 24, 49, 34, 17)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
$Sichern = GUICtrlCreateButton("Sichern", 184, 321, 75, 25)
GUICtrlSetFont(-1, 15, 400, 0, "Arial")
$TabSheet2 = GUICtrlCreateTabItem("Restore")
$Input2 = GUICtrlCreateInput("Input1", 31, 81, 760, 22)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
$Restore_Ordner = GUICtrlCreateLabel("Restore_Ordner", 24, 57, 79, 17)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
$Quellpfadzeigen = GUICtrlCreateButton("Quellpfadzeigen", 800, 129, 83, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
$TreeView1 = GUICtrlCreateTreeView(31, 137, 760, 241)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
$Wiederherstellen = GUICtrlCreateButton("Wiederherstellen", 800, 353, 83, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
$Button1 = GUICtrlCreateButton("suchen", 800, 81, 83, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
$Verfuegbare_sicherungen = GUICtrlCreateLabel("Verfuegbare_sicherungen", 48, 113, 126, 17)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
$Offnen = GUICtrlCreateButton("Offnen", 800, 321, 83, 25)
GUICtrlSetFont(-1, 8, 400, 0, "Arial")
GUICtrlCreateTabItem("")
GUISetState(@SW_SHOW)
If FileExists(@ScriptDir & '\save.ini') Then
$ini = IniRead(@ScriptDir & '\save.ini', "Wochentag", "tage", 0)
For $i = 6 To 0 Step -1
If BitAND($ini, 2 ^ $i) Then
GUICtrlSetState($arCheckBox[$i], $GUI_CHECKED)
EndIf
Next
Local $aData = IniReadSection(@ScriptDir & '\save.ini', "Quelle-Ziele")
; _ArrayDisplay($aData)
For $i = 1 To UBound($aData) - 1
GUICtrlCreateListViewItem($aData[$i][0] & "|" & $aData[$i][1], $hListView)
Next
EndIf
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $add
$sfolder = FileSelectFolder("Wählen den zu Sichernden Ordner:", 'c:')
;if @error Then Return
$dfolder = FileSelectFolder("Wählen Sie den Ziel Ordner:", 'c:')
GUICtrlCreateListViewItem($sfolder & '|' & $dfolder, $hListView)
;if @error Then Return
$hWnd = $hListView
If FileExists($path & ".log") Then FileDelete($path & ".log")
FileWrite($path & ".log", _GUICtrlListView_Export($hWnd, 1, ','))
Case $del
_GUICtrlListView_DeleteItemsSelected($hListView)
$hWnd = $hListView
If FileExists($path & ".log") Then FileDelete($path & ".log")
FileWrite($path & ".log", _GUICtrlListView_Export($hWnd, 1, ','))
Case $Sichern
_iniwrite()
_xcopy()
Case $Task_Plannen
_iniwrite()
Case $Save
_iniwrite()
EndSwitch
WEnd
Func _iniwrite()
;FileDelete($ini)
IniDelete(@ScriptDir & '\save.ini', 'Quelle-Ziele')
Local $checked = 0
For $i = 0 To 6
If BitAND(GUICtrlRead($arCheckBox[$i]), $GUI_CHECKED) Then
$checked = BitOR($checked, 2 ^ $i)
EndIf
Next
For $i = 0 To _GUICtrlListView_GetItemCount($hListView) - 1;hier zählst du die einträge
$var1 = _GUICtrlListView_GetItemText($hListView, $i, 0)
$var2 = _GUICtrlListView_GetItemText($hListView, $i, 1)
;IniWrite('save.ini', 'Backup', 'Quelle'&$i, $var1)
;IniWrite('save.ini', 'Backup', 'Ziel'&$i, $var2)
;IniWrite('save.ini', 'Quelle-Ziele', $var1&$i, $var2&$i)
IniWrite(@ScriptDir & '\save.ini', 'Quelle-Ziele', $var1, $var2)
Next
; Next
IniWrite(@ScriptDir & '\save.ini', 'Wochentag', 'tage', $checked)
;MsgBox(0, "", $Time)
;IniWrite('save.ini', 'Startzeit', 'Uhr', GUICtrlRead($Time))
IniWrite(@ScriptDir & '\save.ini', 'Startzeit', 'Uhr', StringReplace(GUICtrlRead($Time), ':', ''))
EndFunc ;==>_iniwrite
Func _iniread()
#cs Muster-INI
[sicherung]
tage=42
#ce
; 2 + 8 + 32 = Mo/Mi/Fr
; aus INI lesen
Local $savedays = IniRead(@ScriptDir & '\save.ini', 'sicherung', 'tage', 0)
; prüfen ob aktueller Tag für Sicherung vorgesehen ist
If BitAND($savedays, 2 ^ (@WDAY - 1)) Then
; starte Sicherung
EndIf
EndFunc ;==>_iniread
Func _GUICtrlListView_Export($hWnd, $exType = 0, $Delim = Default) ; $exType=0 Array / $exType=1 String
If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
Local $row = _GUICtrlListView_GetItemCount($hWnd)
If $exType Then
If $Delim <> Default Then Local $oldDelim = Opt('GUIDataSeparatorChar', $Delim)
Local $sOut = ''
For $i = 0 To $row - 1
$sOut &= _GUICtrlListView_GetItemTextString($hWnd, $i) & @CRLF
Next
If $Delim <> Default Then Opt('GUIDataSeparatorChar', $oldDelim)
Return $sOut
EndIf
Local $col = _GUICtrlListView_GetColumnCount($hWnd)
Local $aOut[$row][$col]
If $col = 1 Then
ReDim $aOut[$row]
For $i = 0 To UBound($aOut) - 1
$aOut[$i] = _GUICtrlListView_GetItemText($hWnd, $i)
Next
Return $aOut
EndIf
For $i = 0 To UBound($aOut) - 1
For $j = 0 To UBound($aOut, 2) - 1
$aOut[$i][$j] = _GUICtrlListView_GetItemText($hWnd, $i, $j)
Next
Next
Return $aOut
EndFunc ;==>_GUICtrlListView_Export
Func _Load() ; Datenbank-Datei laden
_GUICtrlListView_DeleteAllItems($hListView) ; Das Handle eben noch bestimmen (s. Anfang des Threads)
Local $sItem
; $FileOpenDialog = FileOpenDialog("Pc Liste Wählen", @ScriptDir & "\", "Pc Liste (*.txt;*.csv)", 1 + 4)
Local $hfile = FileOpen(@ScriptDir & '\lastsave.log', 0) ; Datei zum lesen öffnen
If $hfile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
_GUICtrlListView_BeginUpdate($hListView) ; Listview sperren
While True ; Endlosschleife
$sItem = FileReadLine($hfile) ; Zeile aus der Datei lesen
If @error Then ExitLoop ; wenn das Ende der Datei erreicht ist, dann Endlosschleife verlassen
GUICtrlCreateListViewItem($sItem, $hListView) ; mit den eingelesenen Daten einen neuen Listview-Eintrag erstellen
WEnd
_GUICtrlListView_EndUpdate($hListView) ; Listview wieder freigeben
FileClose($hfile) ; Datei schließen
EndIf
EndFunc ;==>_Load
Func CopyWithProgress($srcDir, $destDir)
$date = _DateTimeFormat(_NowCalc(), 2)
If StringRight($srcDir, 1) = "\" Then $srcDir = StringLeft($srcDir, StringLen($srcDir) - 1)
If StringRight($destDir, 1) <> "\" Then $destDir = $destDir & "\"
If Not FileExists($destDir) Then DirCreate($destDir)
;$srcSize = DirGetSize($srcDir, 1)
;$1_percent = $srcSize[0] / 100
;Run('XCOPY "'& $srcDir & '" "' & $destDir & '" /D /S /E /V /C /H /R /O /Y')
$lastpath = StringTrimLeft($srcDir, StringInStr($srcDir, "\", "", -1))
; $TSDIS = Run(@ComSpec & " /c " & @SystemDir & '\xcopy ' & $srcDir & ' ' & $destDir & $lastpath & '\ /D /S /E /V /C /H /R /Y', "", @SW_HIDE)
Run(@ComSpec & " /c " & @SystemDir & '\xcopy "' & $srcDir & '" "' & $destDir & $date & '\' & $lastpath & '\" /D /S /E /V /C /H /R /Y /F >' & @ScriptDir & '\xcopy.txt', "", @SW_SHOW)
$winpos = WinGetPos("Sicherung")
Sleep(1000)
While ProcessExists("xcopy.exe")
ToolTip('Bitte warten........' & @CRLF & 'copy läuft....' & @CRLF & $srcDir & ' ' & $destDir & $lastpath & $date, $winpos[0] + $winpos[2] / 2, $winpos[1] + $winpos[3] / 3) ; sollte mittig zur Gui stehen, oder?
Sleep(100) ; hatte ich vergessen um CPU runterzufahren....
WEnd
ToolTip('')
_FileReadToArray(@ScriptDir & "\xcopy.txt", $line)
For $i = 1 To UBound($line) - 1
$line[$i] = StringReplace($line[$i], ' -> ', '|') ; der String wird ersetzt durch den String mit der Eingabe
GUICtrlCreateListViewItem($line[$i], $hListView1)
Next
;FileDelete (@Scriptdir & "\xcopy.txt")
Local $aData = IniReadSection(@ScriptDir & "\save.ini", "Quelle-Ziele")
; _ArrayDisplay($aData)
For $i = 1 To UBound($aData) - 1
IniWrite($destDir & $date & '\Log.ini', 'Quelle-Ziele', $aData[$i][0], $aData[$i][1] & '\' & $date)
ConsoleWrite($destDir & $date & '\' & $lastpath & '\Log.ini')
Next
EndFunc ;==>CopyWithProgress
Func _xcopy()
For $i = 0 To _GUICtrlListView_GetItemCount($hListView) - 1;hier zählst du die einträge
$var1 = _GUICtrlListView_GetItemText($hListView, $i, 0)
$var2 = _GUICtrlListView_GetItemText($hListView, $i, 1)
CopyWithProgress($var1, $var2)
;IniWrite(@ScriptDir & '\Log.ini', 'Quelle-Ziele', $var1, $var2)
Next
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_xcopy
[/autoit] [autoit][/autoit] [autoit]Func _format()
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Dim $sFilePath = @ScriptDir & '\lastsave.log'
Dim $outFile = @ScriptDir & '\lastsave.log'
Dim $aArray
_FileReadToArray($sFilePath, $aArray) ; datei in Array lesen
For $i = 1 To $aArray[0] ; zeilenweise durchgehen
[/autoit] [autoit][/autoit] [autoit]$aArray[$i] = StringReplace($aArray[$i], ',', '|') ; der String wird ersetzt durch den String mit der Eingabe
Next
If FileExists($outFile) Then FileDelete($outFile) ; falls Ausgabedatei bereits vorhanden - löschen
_FileWriteFromArray($outFile, $aArray, 1) ; vom Array in Ausgabedatei schreiben
EndFunc ;==>_format
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0')
Global $oFSO = ObjCreate('Scripting.FileSystemObject')
Global $strFiles = ''
Switch $sDelim
Case '1'
$sDelim = @CR
Case '2'
$sDelim = @LF
Case '3'
$sDelim = ';'
Case '4'
$sDelim = '|'
Case Else
$sDelim = @CRLF
EndSwitch
If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0
If $sExt = -1 Then $sExt = '*'
If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1
_ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim)
If $iRetType = 0 Then
Local $aOut
$aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1)
If $aOut[1] = '' Then
ReDim $aOut[1]
$aOut[0] = 0
EndIf
Return $aOut
Else
Return StringTrimRight($strFiles, StringLen($sDelim))
EndIf
EndFunc
Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF)
If Not IsDeclared("strFiles") Then Global $strFiles = ''
If ($Dir = -1) Or ($Dir = 0) Then
For $file In $Folder.Files
If $Ext <> '*' Then
If StringRight($file.Name, StringLen($Ext)) = $Ext Then
$strFiles &= $file.Path & $Delim
EndIf
Else
$strFiles &= $file.Path & $Delim
EndIf
Next
EndIf
For $Subfolder In $Folder.SubFolders
If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim
_ShowSubFolders($Subfolder, $Ext, $Dir, $Delim)
Next
EndFunc
Viellen dank jetzt schon für die vorschläge:
Danke
SubZero