Danke für deine Unterstützung. Funktioniert wunderbar.
Die Best coding practices werde ich mir bei Gelegenheit anschauen.
Viele Grüße
Mitac
Danke für deine Unterstützung. Funktioniert wunderbar.
Die Best coding practices werde ich mir bei Gelegenheit anschauen.
Viele Grüße
Mitac
Danke Bitnugger.
Jetzt verstehe ich warum die ListView bockt. Ich werde mich die Tage deine Ansatz umsetzen.
VG, Mitac
Funktion _Laufwerke_ListViewBox
If @UserName = @UserName Or @UserName = @UserName Then
Hust... das macht natürlich Sinn...
Ja, macht es, wenn ich die notwendige Funktion eingebettet hätte.
Es gibt eine Vorgabe, nach der die Sicherung auf einem USB-Stick erfolgen muss.
Nur eine kleine Anzahl Personen soll auch die Lokalen Laufwerke sehen können.
ZitatAlles anzeigenFunktion _Backup_Laufwerke_WM_Notify_Events
Hier hast du bei #forceref $hWndGUI als Parameter angegeben... wobei $hWndGUI aber nirgends deklariert wird. Richtig wäre hier wohl $hWnd.
Wenn man mit mehreren GUI's hantierst, kann die Frage nach der ControlID u.U. ins Auge gehen, deshalb sollte dafür anstelle der ControlID besser das Handle des Controls verwendet werden.
; ...
Global $hBackup_Laufwerke_ListView = ControlGetHandle($hGUI, '', $Backup_Laufwerke_ListView)
Global $hRestore_Laufwerke_ListView = ControlGetHandle($hGUI, '', $Restore_Laufwerke_ListView)
; ...
Func _Backup_Laufwerke_WM_Notify_Events($hWnd, $MsgID, $wParam, $lParam)
#forceref $hWnd, $MsgID, $wParam
Local $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
Local $hWndFrom = DllStructGetData($tNMHDR, "hWndFrom")
Local $nNotifyCode = DllStructGetData($tNMHDR, "Code")
Local $iIDFrom = DllStructGetData($tNMHDR, 'IDFrom')
Switch $hWndFrom
Case $hBackup_Laufwerke_ListView
If $nNotifyCode = $NM_CLICK Then
; ...
EndIf
Case $hRestore_Laufwerke_ListView
If $nNotifyCode = $NM_CLICK Then
; ...
EndIf
EndSwitch
; ...
Return $GUI_RUNDEFMSG
EndFunc ;==>_Backup_Laufwerke_WM_Notify_Events
Mit dem obigen Code wird das Ziellaufwerk gar nicht mehr angezeigt. Ansonsten bleibt alles beim gleichen.
Wenn ich die beiden Zeilen...
Global $hBackup_Laufwerke_ListView = ControlGetHandle($hGUI, '', $Backup_Laufwerke_ListView)
Global $hRestore_Laufwerke_ListView = ControlGetHandle($hGUI, '', $Restore_Laufwerke_ListView)
...vor der Funktion Platziere, erhalte ich die Meldung: Variable used without being declared
Case $hBackup_Laufwerke_ListView
Case ^ ERROR
Wenn ich am Anfang des Scripts Global $hBackup_Laufwerke_ListView und Global $hRestore_Laufwerke_ListView einfüge udn vor der Funktion...
$hBackup_Laufwerke_ListView = ControlGetHandle($hGUI, '', $Backup_Laufwerke_ListView)
$hRestore_Laufwerke_ListView = ControlGetHandle($hGUI, '', $Restore_Laufwerke_ListView)
...wird zwar das Programm gestartet, bei der Wahl eine Ziellaufwerks, wird dieses nicht mehr angezeigt.
Du solltest dir angewöhnen binäre Ressourcen nicht im Hauptskript abzuspeichern, das verlangsamt den Editor einfach nur unnötig.
Lager sie in eine eigene .au3 aus und binde sie mit include ein. Deine zip ist auch nicht lauffähig, die OutlookExConstants fehlt.
Es wäre schön wenn du uns verrätst wo dein Skript in eine Schleife gerät, bzw. welche Funktionen ausgeführt werden wenn du Sachen anklickst die andere unwählbar machen,
damit wir uns nicht durch die tausende Zeilen kämpfen müssen.
Die Binarys habe ich ausgelagert, danke für den Tipp.
Die OutlookExConstants wird nicht benötigt, ich habe sie dennoch in die neue zip im ersten Post eingefügt.
Wenn ich eines der Laufwerke klicke wird darunter das Ziellaufwerk usw. angezeigt, siehe Bild.
Sobald ich z.B. auf Einstellungen klicke und danach eine neues Laufwerk markiere, wird nicht das neue, sondern immer noch das zuvor gewählte Laufwerk angezeigt.
In Zeile 1764 werden die _Backup_Einstellungen() aufgerufen. Der _Text_Editor ab 1961 und _Text_Editor_WM_NOTIFY ab 2042.
Das ListView wird über die _Backup_Laufwerke_WM_Notify_Events Zeile 1517 gesteuert.
Hallo,
wegen der Übersichtlichkeit, habe ich meinem Backup Programm unten anderem eine neue Optik verpasst.
Bis auf zwei Kleinigkeiten, klappt soweit alles.
Was muss ich tun um das ListView zu reaktivieren?
Das Programm generiert vorab eine Ini und sammelt die Notwendigen Daten für das Backup.
Ablage: C:\Users\DeineID\MyBackupRestore\
Leider reichen die 40.000 Zeichen für den Code nicht aus. Deshalb die Zip.
MeineQuellen_1.0.0 muss vorab generiert werden.
Das Programm generiert eine Ini und sammelt die Notwendigen Daten für das Backup.
Ablage: C:\Users\DeineID\MyBackupRestore\
Dateien
Hallo autoiter.
Danke, das ist genau das was ich gesucht habe.
Was hat das mit Arbeitsverweigerung zu tun?
@Bitnugger, habe das Skript zum besseren Verständnis gekürzt bzw. leicht angepasst. Bitrag von Alpines. Array - _ArrayInsert - Bitnugger
Es geht einzig darum vor dem Pfad einen Key für die weitere Bearbeitung in der Ini zu setzen.
autoBert, das funktioniert leider nicht. Es geht um die Keys.
#include <Array.au3>
#include<File.au3>
#include <String.au3>
$sFileName = "KeePass.config.txt"
;~ $sFileName = "KeePass.config.txt"
$hFilehandle = _Filecreate(@ScriptDir & "\" & $sFileName)
$sFilePath = @ScriptDir & "\" & $sFileName
$hFileOpen = FileOpen($sFilePath, $FO_APPEND)
If $hFileOpen = -1 Then
Return False
EndIf
FileWrite($hFilehandle, "" & @CRLF)
FileWrite($hFilehandle, "<Path>D:\Documents\KeePass\Test.kdbx</Path>" & @CRLF)
FileWrite($hFilehandle, "<Path>D:\Documents\KeePass\Test.kdbx</Path>" & @CRLF)
FileWrite($hFilehandle, "<Path>F:\Documents\KeePass\Test.kdbx</Path>" & @CRLF)
FileClose($hFilehandle)
$hFileOpen = FileOpen($sFilePath)
$sFileRead = FileRead($hFileOpen)
FileClose($hFileOpen)
Local $BetweenArray = _StringBetween($sFileRead, "<Path>", "</Path>", $STR_ENDISSTART)
Local $aFile = $BetweenArray
Local $i = 0
While $i < UBound($aFile)
If StringLeft ( ($aFile[$i]) , 1 ) = '' Then
;~ _ArrayInsert ( $aFile, "1=" & $i + 1, "Test " & StringRight ( $aFile[$i] , StringLen ( $aFile[$i] ) - 1 ) )
$i += 1
EndIf
$i += 1
WEnd
_ArrayDisplay ( $aFile , "kdbx" )
$aArrayUnique = _ArrayUnique($aFile) ;
$Kdbx= _ArrayToString($aArrayUnique, @CRLF)
MsgBox($MB_SYSTEMMODAL, "$aArrayUnique ", "Ist: " & @CRLF & $Kdbx & @CRLF & @CRLF & "Ergebnis soll sein: " & @CRLF & _
"1=D:\Documents\KeePass\Test.kdbx" & @CRLF & "2=F:\Documents\KeePass\Test.kdbx" & @CRLF & @CRLF & _
"Wie muss ich in den Code schreiben damit die Keys erzeugt werden?")
Kizum, funktioniert nicht, auch weil ubound , die werte aus _ArrayUnique multipliziert.
Sieht dann so aus:
1=D:\Documents\KeePass\Test.kdbx
1=D:\Documents\KeePass\Test.kdbx
3=D:\Documents\KeePass\Test.kdbx
1=F:\Documents\KeePass\Test.kdbx
1=F:\Documents\KeePass\Test.kdbx
3=F:\Documents\KeePass\Test.kdbx
Es ist egal ob ConsoleWrite sich innerhalb oder außerhalb der schleife befindet, die werte sind die gleichen.
Hallo,
ich stehe im Moment auf dem schlauch.
Mein Skript mach nur zum Teil was es soll.
Die Zeilen werden nach dem auslesen aus dem Array so dargestellt.
Ist Stand:
1=D:\Documents\KeePass\Test.kdbx
1=F:\Documents\KeePass\Test.kdbx
Was muss ich tun um die Zahl um eins zu erhöhen?
Soll:
1=D:\Documents\KeePass\Test.kdbx
2=F:\Documents\KeePass\Test.kdbx
#include <Array.au3>
#include<File.au3>
#include <String.au3>
Global $Ini = (@UserProfileDir & "\myBackupRestore\myBackup.ini")
_KeePass()
Func _KeePass()
Global $sFilepath = $Ini
;~ Local Const $sFilepath = @UserProfileDir & "\mybackuprestore\mybackup.ini"
Local $hFileOpen = FileOpen($sFilepath, $FO_READ)
If $hFileOpen = -1 Then
;~ MsgBox($MB_SYSTEMMODAL, "", "Fehler beim lesen des Files.")
Return False
EndIf
Local $sFileRead = FileRead($hFileOpen)
FileClose($hFileOpen)
;
Local $BetweenArray = _StringBetween($sFileRead, "[KeePass]", "[Lizenzvereinbarung]")
; Inhalt zwischen [KeePass] und [Lizenzvereinbarung ersetzen.
Local $sNewString = StringReplace($sFileRead, $BetweenArray[0], @CRLF & "")
FileDelete($Ini)
Local $WriteIni = FileWrite($Ini, $sNewString)
FileClose($WriteIni)
Local Const $sFilepath = @AppDataDir & "\KeePass\KeePass.config.xml"
if FileExists($sFilepath) Then
IniWrite($Ini, "Quellen", "39", @AppDataDir & '\KeePass')
Else
IniWrite($Ini, "Quellen", "39", "")
EndIf
Local $hFileOpen = FileOpen($sFilepath, $FO_READ)
If $hFileOpen = -1 Then
;~ MsgBox($MB_SYSTEMMODAL, "", "Fehler beim lesen des Files.")
Return False
EndIf
Local $sFileRead = FileRead($hFileOpen)
FileClose($hFileOpen)
Local $BetweenArray = _StringBetween($sFileRead, "<Path>", "</Path>", $STR_ENDISSTART)
For $index = 0 To _ArrayMaxIndex($BetweenArray)
Local $kdbx = $BetweenArray[$index]
;~ _ArraySort($BetweenArray)
;~ _ArrayDisplay($BetweenArray)
$aArrayUnique = _ArrayUnique($BetweenArray) ; Use default parameters to create a unique array of the first column.
;~ _ArrayDisplay($aArrayUnique, "$aArray first column") ; Display the unique array.
;~ MsgBox($MB_SYSTEMMODAL, "$aArrayUnique ", _ArrayToString($aArrayUnique, @CRLF))
Local $sFill = ""
For $i = 0 To $aArrayUnique
$i = $i + 1
;~ For $j = 0 To ubound($BetweenArray[$index])
;~ msgbox(0,"$I " ,$i & "=" & $kdbx)
;~ $j = $j + 1
$sFill &= $i & "=" & $kdbx & @CRLF
;~ $sFill &= $i + 1 & "=" & $kdbx & @CRLF
Next
;~ next
ConsoleWrite($sFill)
Next
EndFunc ;==>_KeePass
KeePass.config.xml
<?xml version="1.0" encoding="utf-8"?>
<Configuration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Meta>
<PreferUserConfiguration>false</PreferUserConfiguration>
<OmitItemsWithDefaultValues>true</OmitItemsWithDefaultValues>
</Meta>
<Application>
<LastUpdateCheck>2018-10-07T09:38:02Z</LastUpdateCheck>
<LastUsedFile>
<Path>D:\Documents\KeePass\Test.kdbx</Path>
<Path>F:\Documents\KeePass\Test.kdbx</Path>
<CredProtMode>Obf</CredProtMode>
<CredSaveMode>NoSave</CredSaveMode>
</LastUsedFile>
<MostRecentlyUsed>
<MaxItemCount>12</MaxItemCount>
<Items>
<ConnectionInfo>
<Path>D:\Documents\KeePass\Test.kdbx</Path>
<CredProtMode>Obf</CredProtMode>
<CredSaveMode>NoSave</CredSaveMode>
</ConnectionInfo>
</Items>
</MostRecentlyUsed>
<WorkingDirectories>
<Item>Database@D:\Documents\KeePass</Item>
<Item>Import@D:\Documents</Item>
</WorkingDirectories>
<Start>
<CheckForUpdate>true</CheckForUpdate>
<CheckForUpdateConfigured>true</CheckForUpdateConfigured>
</Start>
<FileOpening />
<FileClosing />
<TriggerSystem>
<Triggers />
</TriggerSystem>
</Application>
<Logging />
<MainWindow>
<X>595</X>
<Y>896</Y>
<Width>1877</Width>
<Height>1041</Height>
<SplitterHorizontalFrac>0.8333</SplitterHorizontalFrac>
<SplitterVerticalFrac>0.25</SplitterVerticalFrac>
<Layout>Default</Layout>
<ToolBar />
<EntryView />
<TanView />
<EntryListColumnCollection>
<Column>
<Type>Title</Type>
<Width>166</Width>
</Column>
<Column>
<Type>UserName</Type>
<Width>166</Width>
</Column>
<Column>
<Type>Password</Type>
<Width>166</Width>
<HideWithAsterisks>true</HideWithAsterisks>
</Column>
<Column>
<Type>Url</Type>
<Width>166</Width>
</Column>
<Column>
<Type>Notes</Type>
<Width>166</Width>
</Column>
</EntryListColumnCollection>
<EntryListColumnDisplayOrder>0 1 2 3 4</EntryListColumnDisplayOrder>
<ListSorting>
<Order>Ascending</Order>
</ListSorting>
</MainWindow>
<UI>
<TrayIcon />
<Hiding />
<StandardFont>
<Family>Microsoft Sans Serif</Family>
<Size>8.25</Size>
<GraphicsUnit>Point</GraphicsUnit>
<Style>Regular</Style>
<OverrideUIDefault>false</OverrideUIDefault>
</StandardFont>
<PasswordFont>
<Family>Courier New</Family>
<Size>8.25</Size>
<GraphicsUnit>Point</GraphicsUnit>
<Style>Regular</Style>
<OverrideUIDefault>false</OverrideUIDefault>
</PasswordFont>
<BannerStyle>WinVistaBlack</BannerStyle>
<DataEditorFont>
<Family>Microsoft Sans Serif</Family>
<Size>8.25</Size>
<GraphicsUnit>Point</GraphicsUnit>
<Style>Regular</Style>
<OverrideUIDefault>false</OverrideUIDefault>
</DataEditorFont>
<UIFlags>0</UIFlags>
<KeyCreationFlags>0</KeyCreationFlags>
<KeyPromptFlags>0</KeyPromptFlags>
</UI>
<Security>
<WorkspaceLocking>
<LockAfterTime>0</LockAfterTime>
<LockAfterGlobalTime>0</LockAfterGlobalTime>
</WorkspaceLocking>
<Policy />
<MasterPassword>
<MinimumLength>0</MinimumLength>
<MinimumQuality>0</MinimumQuality>
</MasterPassword>
</Security>
<Native />
<PasswordGenerator>
<AutoGeneratedPasswordsProfile>
<GeneratorType>CharSet</GeneratorType>
<Length>20</Length>
<CharSetRanges>ULD_______</CharSetRanges>
</AutoGeneratedPasswordsProfile>
<LastUsedProfile>
<GeneratorType>CharSet</GeneratorType>
<Length>20</Length>
<CharSetRanges>ULD_______</CharSetRanges>
</LastUsedProfile>
<UserProfiles />
</PasswordGenerator>
<Defaults>
<OptionsTabIndex>0</OptionsTabIndex>
<SearchParameters>
<ComparisonMode>InvariantCultureIgnoreCase</ComparisonMode>
</SearchParameters>
<KeySources />
</Defaults>
<Integration>
<HotKeyGlobalAutoType>393281</HotKeyGlobalAutoType>
<HotKeySelectedAutoType>0</HotKeySelectedAutoType>
<HotKeyShowWindow>393291</HotKeyShowWindow>
<HotKeyEntryMenu>0</HotKeyEntryMenu>
<UrlSchemeOverrides>
<BuiltInOverridesEnabled>1</BuiltInOverridesEnabled>
<CustomOverrides />
</UrlSchemeOverrides>
<ProxyType>System</ProxyType>
<ProxyAuthType>Auto</ProxyAuthType>
</Integration>
<Custom />
</Configuration>
Hallo zusammen,
@BugFix, danke für den Code, leider bringt mich das im Moment nicht weiter. Die zweite Routine rödelt mehr als 40 Sekunden, danach werden aber keine Daten angezeigt.
Der Kopiervorgang startet auch nicht.
@Peter S. Taler, der Kopiervorgang funktioniert mit Oscars Funktion perfekt. Die Excludes sind in der Ini enthalten. Der Anwender kann sie ebenso wie die zu kopierenden Pfade nach belieben erweitern.
Es geht genau darum was AspirinJunkie geschrieben hat.
Nur zur Info, in FileCopyEx ist bereits eine Funktion enthalten die vor dem Kopiervorgang ein Array der zu kopierenden Daten erstellt.
Da ich 40 Einträge habe, werden 40 Arrays in folge erstellt. Ich fände es schöner wenn man die Funktion so aufbohren könnte, das Sie im Vorfeld ein Array für alle Daten erstellt.
Func _FileCopyEx_CreateArrays($sSourceDir, $sDestDir, ByRef $aSourceFiles, ByRef $aDestDir, $sMask = '*', $iRecur = $FLTAR_RECUR)
$aSourceFiles = _FileListToArrayRec($sSourceDir, $sMask, $FLTAR_FILES, $iRecur, $FLTAR_SORT)
If @error Then Return SetError(1, 0, 0) ; wenn sich im Quellverzeichnis keine Dateien befinden, dann Fehlercode = 1
If IsNumber($aSourceFiles[0]) Then _ArrayDelete($aSourceFiles, 0) ; wenn das Array 1-basiert ist, dann den "Zähler" entfernen
ReDim $aDestDir[UBound($aSourceFiles)]
Local $sTmp = ''
If StringRight($sSourceDir, 1) <> '\' Then $sSourceDir &= '\' ; wenn beim Quellverzeichnis der hintere Backslash fehlt, dann hinzufügen
If StringRight($sDestDir, 1) <> '\' Then $sDestDir &= '\' ; wenn beim Zielverzeichnis der hintere Backslash fehlt, dann hinzufügen
For $i = 0 To UBound($aSourceFiles) - 1
$sTmp = StringRegExpReplace($aSourceFiles[$i], '(.+\\).*', '$1') ; Verzeichnis aus der Quelldatei extrahieren
If $sTmp = $aSourceFiles[$i] Then $sTmp = '' ; wenn kein Verzeichnis vorhanden, dann einen Leerstring benutzen
$aDestDir[$i] = $sDestDir & $sTmp ; Zielverzeichnis anhand der Quelldatei erstellen
$aSourceFiles[$i] = $sSourceDir & $aSourceFiles[$i] ; der Quelldatei das Quellverzeichnis voranstellen
Next
Return SetError(0, 0, 1)
EndFunc ;==>_FileCopyEx_CreateArrays
Falls sich jemand die UDF mal näher anschauen möchte, hier der Link : _FileCopyEx
Danke und Grüße
Mitac.
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
Hallo,
beim Exportieren der MRU Werte per ini erhalte ich folgende FM:
FEHLER: Ungültige Syntax.
Geben Sie "REG EXPORT /?" ein, um die Syntax anzuzeigen.
Die anderen Schlüssel werden sauber exportiert.
So, werden auch die MRU Werte exportiert.
RunWait(@Comspec & ' /k reg EXPORT "HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Access\File MRU" Access_16_File_MRU.reg',@ScriptDir & "\Regkeys", @sw_show)
Hat jemand eine Idee woran es liegen könnte?
[Registry]
Jumplistitems_Maximum="HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced"
TypedPaths="HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\TypedPaths"
Network="HKEY_CURRENT_USER\Network"
Control_Panel="HKEY_CURRENT_USER\Control Panel"
Access_16_File_MRU="HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Access\File MRU"
Access_16_Place_MRU="HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Access\Place MRU"
Excel_16_File_MRU="HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Excel\File MRU"
Excel_16_Place_ MRU ="HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Excel\Place MRU"
OneNote_16_Place_ MRU ="HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\OneNote\Place MRU"
Outlook_16_Profiles="HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Profiles"
Word_16_File_ MRU ="HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Word\File MRU"
Word_16_Place_MRU="HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Word\Place MRU"
#include <MsgBoxConstants.au3>
Reg_Export()
Func Reg_Export()
$ini = @scriptdir & "\myBackup.ini"
;~ ; Read the INI section labelled 'General'. This will return a 2 dimensional array.
Local $aArray = IniReadSection($ini, "Registry")
;~ ; Check if an error occurred.
If Not @error Then
;~ ; Enumerate through the array displaying the keys and their respective values.
For $i = 1 To $aArray[0][0]
MsgBox($MB_SYSTEMMODAL, "", "Key: " & $aArray[$i][0] & @CRLF & "Value: " & $aArray[$i][1])
Run(@comspec & ' /k reg export ' & '"' & $aArray[$i][1] & '"' & " " & $aArray[$i][0] & ".reg /Y", @ScriptDir & "\Regkeys", @SW_show)
Next
EndIf
EndFunc
Alles anzeigen
Hallo zusammen,
ich habe wieder mal ein (für euch sicherlich) kleines Problemchen.
Es geht um die beiden Checkboxen unter Sicherung.
Beim deaktivieren/aktivieren der jeweiligen Box, soll der Status aktualisiert werden.
Funktioniert leider nicht wie ich es gerne hätte.
Im voraus vielen Dank.
Grüße
Mitac
Funktioniert wunderbar - Dank autoiter.
Gruß mitac
Hallo autoiter,
bei Punkt eins komme ich leider immer noch nicht weiter.
Wenn ich _ArraySearch in den Code einbaue, erfolgt eine Dauer Meldung das „Kein Volume ausgewählt“ ist.
Punkt zwei funktioniert.
Aufgrund der Zeichen Beschränkung hatte ich den Code gekürzt, leider hat sich da ein Fehler eingeschlichen.
1. Problem - Beim klicken des Radio Buttons erfolgt keine Aktivität. Über den Schalter "Ausgewählte..." klappt alles wunderbar. Was mache ich falsch?
2. Wenn ich zwei Sticks angeschlossen habe und diese abwechselnd in die ini schreiben lasse, erhalte ich folgende FM: (312) : ==> Can not redeclare a constant
#Region #### AutoIt Includes ####
#include <Array.au3>
#include <Clipboard.au3>
#include <ColorConstants.au3>
;~ #include 'Datenaufnahme.au3'
#Include <File.au3>
;~ #include '_FileCopyEx.au3'
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <GUIconstants.au3>
#include <Misc.au3>
#include <MsgBoxConstants.au3>
#include <Process.au3>
#include <ScreenCapture.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#EndRegion #### AutoIt Includes ####
Opt('GUICloseOnEsc', 0)
Global $sTitle = ' myBackup - '
Global $sVersion = '1.0.3'
Global $sDate = '28.08.2017'
Global $hGui = GUICreate(StringFormat('%s v%3.5s', $sTitle, $sVersion), 302,300,-1,300) ; Fenster erstellen
$Label_1=GuiCtrlCreateLabel("Status:",26,10,50,15)
$Label_2=GuiCtrlCreateLabel("Kein USB-Medium gefunden!",70,10,200,15)
GUICtrlCreateGroup(" Ziellaufwerk wählen Freier Platz", 10, 115, 281, 80) ; Umrandung Ziellaufwerk
$Label_3=GuiCtrlCreateLabel("Größe der zu sichernden Daten:" ,26,30,270,15)
$Label_4=GuiCtrlCreateLabel("GB",197,30,75,15,0x2) ; 0x2 mittig
GUICtrlCreateGroup("", 10, 55, 281, 50) ; Umrandung Outlook
$Label_5=GuiCtrlCreateLabel("Outlook ",26,55,50,15)
Local $Outlook = GUICtrlCreateCheckbox("Persönliche Ordner sichern", 26, 75, 200, 20)
GUICtrlSetState(-1, 0) ; unchecked
$btnBackup = GUICtrlCreateButton(" Backup ", 26, 250)
$btnIni = GUICtrlCreateButton(" Edit ini... ", 120, 250)
$btnRestore = GUICtrlCreateButton(" Restore ", 215, 250)
$hStart = GUICtrlCreateButton('Ausgewählte Volumes anzeigen', 15, 200, 275, 25)
If Not FileExists(@ScriptDir & "\myBackup.ini") Then
_ini_create()
EndIf
#Region ### ini_read ####
Global $q_Array = IniReadSection(@ScriptDir & "\myBackup.ini", "Quellen")
Global $z_Array = IniReadSection(@ScriptDir & "\myBackup.ini", "Ziel")
Global $Backup_Ziel_Verzeichnis = ($z_Array[1][1] )
If $Backup_Ziel_Verzeichnis = "@ScriptDir" Then
$Backup_Ziel_Verzeichnis= StringReplace($Backup_Ziel_Verzeichnis,"@ScriptDir",@ScriptDir)
$Backup_Ziel_Verzeichnis= ($Backup_Ziel_Verzeichnis &"\Backup\")
EndIf
local $tmp = 0
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)
Local $Ordner = DirGetSize($q_Array[$i][1])
DirGetSize($Quell_Verzeichnis)
$tmp +=($Ordner) ;Größe zusammenrechnen
Next
GUICtrlSetData($Label_3,"Größe der zu sichernden Daten:")
$gesammt = GUICtrlSetData($Label_4, round(($tmp /1024 /1024), 0) & " MB")
#EndRegion ### ini_read ####
GUISetState(@SW_SHOW, $hGui) ; Show GUI
_USB_Medium() ;Ist ein USB-Medium angeschlossen?
#Region ### _ini_create ####
Func _ini_create()
; Create a constant variable in Local scope of the filepath that will be read/written to.
Local Const $sFilePath = @ScriptDir & "\myBackup.ini"
; Create a temporary file to write data to.
If Not FileWrite($sFilePath, "" & @CRLF) Then
MsgBox($MB_SYSTEMMODAL, "", "Fehler - ini- Datei kann nicht erstellt werden!")
Return False
EndIf
; Open the file for writing (append to the end of a file) and store the handle to a variable.
Local $hFileOpen = FileOpen($sFilePath, $FO_APPEND)
If $hFileOpen = -1 Then
MsgBox($MB_SYSTEMMODAL, "", "Fehler - ini- Datei kann nicht erstellt werden!")
Return False
EndIf
; Write data to the file using the handle returned by FileOpen.
FileWrite($hFileOpen, "In dieser Datei werden die zu sichernden Pfade festgelegt, die mit dem myBackup Tool gesichert werden sollen" & @CRLF)
FileWrite($hFileOpen, "" & @CRLF)
FileWrite($hFileOpen, "------------------------------------- Bitte hier keine änderung vornehmen! -------------------------------------" & @CRLF)
FileWrite($hFileOpen, "[Quellen]" & @CRLF)
FileWrite($hFileOpen, "1=" & @DesktopDir & @CRLF)
FileWrite($hFileOpen, "[Ziel]" & @CRLF)
FileWrite($hFileOpen, "1=" & @CRLF)
; Close the handle returned by FileOpen.
FileClose($hFileOpen)
#EndRegion ### _ini_create ####
#Region ### ini_Info ####
GUICreate("Ini-Datei nicht gefunden...", 500, 300) ; will create a dialog box that when displayed is centered
Local $idMyedit = GUICtrlCreateEdit("",10, 10, 480, 250, $ES_READONLY)
GUISetBkColor(0xFFFABB) ;; 0xFFFFFF)
GUICtrlSetColor(-1, 0x000000)
GUICtrlSetFont(-1, 9, 800, 0, "Arial")
$btnOK = GUICtrlCreateButton(" OK ", 235, 270, 50, 25)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $btnOK
ExitLoop
EndSwitch
WEnd
GUIDelete()
EndFunc ;==>create_ini
#EndRegion ### ini_Info ####
#Region ### USB_Medium ####
func _USB_Medium()
Global $drives=DriveGetDrive("removable")
If @error Then
Sleep(2000)
MsgBox(16,"Kein USB-Stick gefunden!","Kein USB-Stick gefunden!" & @cr & @cr & "Bitte schliessen Sie einen USB-Stick an!" & @cr & @cr & "Die Anwendung wird beendet.",20000)
EndIf
dim $name[$drives[0]+1]
dim $space[$drives[0]+1]
$maxname=2
$maxspace=0
for $i=1 to $drives[0]
$name[$i]=StringLen(DriveGetLabel($drives[$i]))
if $name[$i]>=$maxname then
$maxname=$name[$i]
endif
$space[$i]=StringLen(Round(DriveSpaceFree($drives[$i])))
if $space[$i]>=$maxspace then
$maxspace=$space[$i]
endif
Next
$width=($maxname+$maxspace)+8+150
if $width<210 then $width=300
For $i=1 to $drives[0]
If $i=0 Then
GUICtrlSetData($Label_2,"Kein USB Medium angeschloßen!")
Sleep(5000)
MsgBox(16,"Kein USB-Medium gefunden!","Kein USB-Medium gefunden!" & @CR & "Die Anwendung wird jetzt beendet." & @cr & $Label_3 & " " & $Label_4,30000)
Exit
Else
If $i=NOT 0 Then
GUICtrlSetData($Label_2,"USB-Medium gefunden...") ;;report drives found
EndIf
EndIf
Next
dim $chkboxes[$drives[0] + 1]
$chkboxes[0]=$drives[0]
$Ypos=130
for $i=1 to $drives[0]
$chkboxes[$i]=GUICtrlCreateRadio(StringUpper($drives[$i]), 26,$Ypos,35,20) ;; & " (" & DriveGetLabel($drives[$i]) & ")"),26,$Ypos,($maxname+5)*8,20)
GuiCtrlSetState(-1,$GUI_UNCHECKED)
$Ypos=$Ypos+20
next
$Ypos=130
for $i=1 to $drives[0]
$FreeMem=GuiCtrlCreateLabel(Round(DriveSpaceFree($drives[$i])) & " MB",198,$Ypos,75,15,0x2)
$Ypos=$Ypos+20
next
#Region Test
$sCheckedDrives = ''
For $i = 1 To $drives[0]
If BitAND(GUICtrlRead($chkboxes[$i]), 1) Then
$sCheckedDrives &= ControlGetText("", '', $chkboxes[$i]) & ''
EndIf
;~ $sCheckedDrives = ''
;~ For $i = 1 To $drives[0]
If BitAND(GUICtrlRead($chkboxes), $GUI_CHECKED) = $GUI_CHECKED Then
;~ If BitAND(GUICtrlRead($sCheckedDrives), $GUI_CHECKED) = $GUI_CHECKED Then
;~ $sCheckedDrives &= ControlGetText("", '', $chkboxes[$i]) & ''
MsgBox(64, 'Info', $sCheckedDrives & "\Datensicherung111_" & @UserName) , 60, $hGUI)
EndIf
;~ If GUICtrlRead($chkboxes[$i]), 1) = $GUI_CHECKED Then
;~ MsgBox(64, 'Info', $sCheckedDrives & "\Datensicherung_" & @UserName) ;;, 60, $hGUI)
;~ EndIf
Next
#Region Loop
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
Exit
Case $hStart
$sCheckedDrives = ''
For $i = 1 To $drives[0]
If BitAND(GUICtrlRead($chkboxes[$i]), 1) Then
$sCheckedDrives &= ControlGetText("", '', $chkboxes[$i]) & ''
EndIf
Next
If $sCheckedDrives <> '' Then
MsgBox(64, 'Info', $sCheckedDrives & "\myBackup_" & @UserName, 60, $hGUI)
Local Const $sFilePath = (@ScriptDir & "\myBackup.ini")
IniWriteSection($sFilePath, "Ziel", "1=" & $sCheckedDrives & "\myBackup_" & @UserName & "\")
Local $aArray = IniReadSection($sFilePath, "Ziel")
If Not @error Then
ShellExecute("myBackup.ini")
EndIf
Else
MsgBox(64, 'Info', 'Keine Volumes ausgewählt', 60, $hGUI)
EndIf
Case $Outlook
_Outlook()
Case $btnIni
_edit_ini()
Case $btnBackup; If backup button is pressed.
_Backup() ; Start backup
Case $btnRestore; If backup button is pressed.
_CaptureScreen() ; Start backup
EndSwitch
WEnd
EndFunc ;Ende - USB-Medium angeschlossen?
#EndRegion ### USB_Medium ####
#Region ### Edit Ini ####
Func _edit_ini()
If Not FileExists(@ScriptDir & "\myBackup.ini") Then
_ini_create()
Else
ShellExecute("myBackup.ini")
EndIf
EndFunc
#EndRegion ### Edit Ini ####
Alles anzeigen
Perfekt! Danke Oscar.
Gruß Mitac
Hallo autoiter,
das bringt mich auch nicht weiter. Vielmehr stellt sich mir die Frage, wie muss die FOR/NEXT Schleife aussehen, damit alle Pfade gesplittet sind.
Im Moment funktioniert das nur mit dem letzten Pfad.
Nur zur Info. Ich bin ein Newbie was Coden angeht. Falls Du, oder jemand anders mir den Code bereitstellen würde, wäre ich sehr dankbar.
Ist:
C:\Users\MeineID\AppData\Local\Microsoft\Outlook\meine.mail@gmail.com.ost
D:\Documents\Outlook-Dateien\iCloud Archive.pst
D:\Ordner\Orner1\Ordner2\Outlook-Dateien\iCloud Archive1.pst
G:\Ordner\Ordner1\Ordner2\Ordner3\Outlook-Dateien\iCloud Archive3.pst
C:\Users\MeineID\AppData\Local\Microsoft\Outlook\meine.mail1@gmail.com.ost
Soll:
C:\Users\MeineID\AppData\Local\Microsoft\Outlook
D:\Ordner\Orner1\Ordner2\Outlook-Dateien
G:\Ordner\Ordner1\Ordner2\Ordner3\Outlook-Dateien
C:\Users\MeineID\AppData\Local\Microsoft\Outlook
Grüße mitac
Hallo,
wie muss das Script erweitert werden damit alle Pfade gesplittet werden.
Im Moment wird nur der letzte Pfad gesplittet.
C:\Users\MeineID\AppData\Local\Microsoft\Outlook\meine.mail@gmail.com.ost
D:\Documents\Outlook-Dateien\iCloud Archive.pst
D:\Ordner\Orner1\Ordner2\Outlook-Dateien\iCloud Archive1.pst
G:\Ordner\Ordner1\Ordner2\Ordner3\Outlook-Dateien\iCloud Archive3.pst
C:\Users\MeineID\AppData\Local\Microsoft\Outlook\meine.mail1@gmail.com.ost
$sText = FileRead(@ScriptDir & "\Persönliche_Ordner.txt")
Global $text = ''
$a = _PathSplit1($sText)
;~ $a = _PathSplit1(@ScriptFullPath)
For $i = 0 To UBound($a) - 1
$text &= $a[$i] & @CRLF
Next
MsgBox(0, "", $text)
Func _PathSplit1($sPath)
If $sPath = "" Or StringRegExp($sPath, ('.*\\.*\/')) Then Return SetError(1, 0, -1)
Local $RetArray[8], $pDelim = ""
If StringRegExp($sPath, '^(?i)([A-Z]:|\\)(\\[^\\]+)+$') Then $pDelim = "\"
If StringRegExp($sPath, '(?i)(^.*:/)(/[^/]+)+$') Then $pDelim = "//"
If $pDelim = "" Then $pDelim = "/"
If Not StringInStr($sPath, $pDelim) Then Return $sPath
If $pDelim = "\" Then $pDelim &= "\"
;~ $RetArray[0] = $sPath ;; Alles
;~ $RetArray[1] = StringRegExpReplace($sPath, $pDelim & '.*', $pDelim) ;; Laufwerk
$RetArray[2] = StringRegExpReplace($sPath, $pDelim & '[^' & $pDelim & ']*$', '') ;; Laufwerk + Pfad
;~ $RetArray[3] = StringRegExpReplace($sPath, '\.[^.]*$', '') ;; Laufwerk + Pfad + Dateiename ohne Endung
;~ $RetArray[4] = StringRegExpReplace($sPath, '(?i)([A-Z]:' & $pDelim & ')', '') ;; Voller Pfad ohne Laufwerksbuchstaben
;~ $RetArray[5] = StringRegExpReplace($sPath, '^.*' & $pDelim, '') ;; Dateiename + Endung
;~ $RetArray[6] = StringRegExpReplace($RetArray[5], '\.[^.]*$', '') ;; Dateiename
;~ $RetArray[7] = StringRegExpReplace($sPath, '^.*\.', '') ;; Dateiendung
Return $RetArray
EndFunc ;==>_PathSplit1
Alles anzeigen