[Blockierte Grafik: http://www.fotos-hochladen.net/thumbnail/erase64n81dgmrx_thumb.jpg] Hey,
das ist zwar nicht mein erstes Programm, bin aber wohl noch ziemlich am Anfang.
Funktionsweise:
Spoiler anzeigen
Man trägt einen Ordner ein aus dem Dateien mit einer definierten Endung nach einem gewissen Zeitraum in einen anderen Ordner verschoben werden. Aus diesem anderen Ordner werden die Dateien wiederum nach einem zuvor eingetragenen Zeitraum gelöscht.
Dateipfad eintragen:
Ordner aus dem die Dateien verschoben werden sollen.
Neues Verzeichnis:
Ordner in das die Dateien verschoben und nach einem bestimmten Zeitraum gelöscht werden sollen.
Endung:
Die Dateiendung der Dateien nach denen gesucht werden soll.
Clear:
Zeitraum nachdem die Dateien gelöscht werden sollen.
Intervall(Sek.):
In welchem Intervall das Programm ausgeführt werden soll.
Check(in Std.):
Wie alt die Datei sein darf bevor sie verschoben wird.
Code:
Spoiler anzeigen
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.6.1
Author: I3asti
#ce ----------------------------------------------------------------------------
#include "GUIConstants.au3"
#include "GuiListView.au3"
#include "file.au3"
#include "date.au3"
#include "EditConstants.au3"
Opt("GUIOnEventMode", 1)
[/autoit] [autoit][/autoit] [autoit]Dim $Datei, $Intervall, $File, $Time, $Log, $Stunde, $Verschiebe, $Endung, $Clear
Dim $Ordner[5000], $Ordnerneu[5000], $Endungen[5000], $Loeschen[5000]
$File = @ScriptDir & "\Dateien.txt"
$Log = @ScriptDir & "\Log.txt"
$LogD = @ScriptDir & "\LogDelete.txt"
#region GUI
$Erase = GUICreate("Erase", 622, 443, 192, 125)
$Listview = GUICtrlCreateListView("Dateipfad|Neues Verzeichnis|Dateiendung|Clear in Tagen", 8, 8, 609, 279)
GUICtrlSendMsg(-1, 0x101E, 0, 202)
GUICtrlSendMsg(-1, 0x101E, 1, 202)
GUICtrlSendMsg(-1, 0x101E, 2, 100)
GUICtrlSendMsg(-1, 0x101E, 3, 100)
$Dateipfad_Input = GUICtrlCreateInput("", 8, 336, 203, 21)
$Dateipfad_Label = GUICtrlCreateLabel("Dateipfad eingeben:", 8, 312, 148, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Verschiebe_Input = GUICtrlCreateInput("", 222, 336, 203, 21)
$Verschiebe_Label = GUICtrlCreateLabel("Neues Verzeichnis:", 222, 312, 148, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Endung_Input = GUICtrlCreateInput("", 437, 336, 80, 21)
$Endung_Label = GUICtrlCreateLabel("Endung:", 437, 312, 148, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Clear_Input = GUICtrlCreateInput("", 534, 336, 80, 21)
$Clear_Label = GUICtrlCreateLabel("Clear:", 534, 312, 148, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Intervall_Input = GUICtrlCreateInput("", 8, 384, 271, 21)
$Intervall_Label = GUICtrlCreateLabel("Intervall (Sek.):", 8, 360, 148, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Check_Input = GUICtrlCreateInput("", 284, 384, 241, 21)
$Check_Label = GUICtrlCreateLabel("Check (in Std.):", 284, 360, 148, 24)
GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif")
$Eintragen_Button = GUICtrlCreateButton("Eintragen", 534, 371, 83, 33, 0)
$Start_Button = GUICtrlCreateButton("Start", 534, 408, 83, 33, 0)
$Stop_Button = GUICtrlCreateButton("Stop", 448, 408, 83, 33, 0)
$Delete_Button = GUICtrlCreateButton("Löschen", 362, 408, 83, 33, 0)
$Exit_Button = GUICtrlCreateButton("Exit", 8, 408, 83, 33, 0)
$Label_Status = GUICtrlCreateLabel("Programm gestoppt", 100, 420, 100)
$Label_Fehler = GUICtrlCreateLabel("", 200, 420, 150)
GUISetState(@SW_SHOW)
GUICtrlSetOnEvent($Exit_Button, "_Ende")
GUISetOnEvent($GUI_EVENT_CLOSE, "_Ende")
GUICtrlSetOnEvent($Start_Button, "_Start")
GUICtrlSetOnEvent($Stop_Button, "_Stop")
GUICtrlSetOnEvent($Eintragen_Button, "_Eintragen")
GUICtrlSetOnEvent($Delete_Button, "_Delete")
#endregion GUI
_Load()
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]Sleep(100)
[/autoit] [autoit][/autoit] [autoit]WEnd
[/autoit] [autoit][/autoit] [autoit]Func _Start()
[/autoit] [autoit][/autoit] [autoit]$Intervall = GUICtrlRead($Intervall_Input) ;Intervall in Variable schreiben
$Stunde = GUICtrlRead($Check_Input) ;Checkzeit in Variable schreiben
$Intervall = $Intervall * 1000 ;Intervall Standard in Sekunden
If $Intervall <> "" Then
[/autoit] [autoit][/autoit] [autoit]If $Stunde <> "" Then
[/autoit] [autoit][/autoit] [autoit]$Stunde = _TimeToTicks($Stunde, 00, 00)
GUICtrlSetData($Label_Status, "Programm gestartet") ;Programm gestartet als Label setzen
AdlibRegister("_Vergleich", $Intervall) ;startet Vergleich
Else
[/autoit] [autoit][/autoit] [autoit]MsgBox(16, "Fehler", "Bitte Checkzeit eingeben")
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit]MsgBox(16, "Fehler", "Bitte Intervall eintragen") ;Fehlermeldung
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_Start
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _Stop()
[/autoit] [autoit][/autoit] [autoit]AdlibUnRegister("_Vergleich") ;beendet Vergleich
GUICtrlSetData($Label_Status, "Programm gestopt") ;Programm gestopt als Label setzen
EndFunc ;==>_Stop
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _Vergleich()
[/autoit] [autoit][/autoit] [autoit]If $Ordner[0] <> 0 Then ;überprüft ob Ordner vorhanden sind
[/autoit] [autoit][/autoit] [autoit]For $k = 1 To $Ordner[0] ;solange Dateien im Array sind
[/autoit] [autoit][/autoit] [autoit]If FileExists($Ordnerneu[$k]) Then ;Test ob der Ordner existiert
[/autoit] [autoit][/autoit] [autoit]$AlteDateien = _FileListToArray($Ordnerneu[$k], "*" & $Endungen[$k], 1) ;Liste mit files in Array schreiben
[/autoit] [autoit][/autoit] [autoit]If IsArray($AlteDateien) Then ;überprüft ob $Dateien ein Array ist
[/autoit] [autoit][/autoit] [autoit]For $l = 1 To $AlteDateien[0] ;solange Dateien im Array sind
[/autoit] [autoit][/autoit] [autoit]$Zusammengesetzt = $Ordnerneu[$k] & $AlteDateien[$l]
[/autoit] [autoit][/autoit] [autoit]If FileExists($Zusammengesetzt) Then ;wenn Datei existiert
[/autoit] [autoit][/autoit] [autoit]$Time = FileGetTime($Zusammengesetzt)
$DateiTag = $Time[0] & "/" & $Time[1] & "/" & $Time[2] & " 00:00:00" ;Datei Tag schreiben
$SystemTag = @YEAR & "/" & @MON & "/" & @MDAY & " 00:00:00" ;Datum heute
[/autoit] [autoit][/autoit] [autoit]$Differenz = _DateDiff("D", $DateiTag, $SystemTag) ;Differenz zwischen tag
[/autoit] [autoit][/autoit] [autoit]If $Differenz >= $Loeschen[$k] Then
[/autoit] [autoit][/autoit] [autoit]FileDelete($Zusammengesetzt) ;Datei löschen
FileWriteLine($LogD, $Zusammengesetzt & @CRLF) ;Log schreiben
EndIf
EndIf
Next
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetData($Label_Fehler, "Dateien nicht gefunden") ;Fehlerausgabe wenn keine Dateien gefunden werden
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetData($Label_Fehler, "Ordner nicht gefunden") ;Fehlerausgabe wenn kein Ordner gefunden wurde
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]If FileExists($Ordner[$k]) Then ;Test ob der Ordner existiert
[/autoit] [autoit][/autoit] [autoit]$Dateien = _FileListToArray($Ordner[$k], "*" & $Endungen[$k], 1) ;Liste mit files in Array schreiben
[/autoit] [autoit][/autoit] [autoit]If IsArray($Dateien) Then ;überprüft ob $Dateien ein Array ist
[/autoit] [autoit][/autoit] [autoit]For $l = 1 To $Dateien[0] ;solange Dateien im Array sind
[/autoit] [autoit][/autoit] [autoit]$Zusammengesetzt = $Ordner[$k] & $Dateien[$l]
[/autoit] [autoit][/autoit] [autoit]If FileExists($Zusammengesetzt) Then ;wenn Datei existiert
[/autoit] [autoit][/autoit] [autoit]$Time = FileGetTime($Zusammengesetzt)
$DateiTag = $Time[0] & "/" & $Time[1] & "/" & $Time[2] & " 00:00:00" ;Datei Tag schreiben
$DateiZeit = _TimeToTicks($Time[3], $Time[4], $Time[5]) ;Datei Zeit in Ticks wandeln
$SystemTag = @YEAR & "/" & @MON & "/" & @MDAY & " 00:00:00" ;Datum heute
$SystemZeit = _TimeToTicks(@HOUR, @MIN, @SEC);Zeit jetzt
$Differenz = _DateDiff("D", $DateiTag, $SystemTag) ;Differenz zwischen tag
[/autoit] [autoit][/autoit] [autoit]If $Differenz >= 1 Then
[/autoit] [autoit][/autoit] [autoit]$Zeit = $Differenz * 24
$SystemZeit = $SystemZeit + _TimeToTicks($Zeit, 00, 00) ;Systemzeit plus 1 Tag
EndIf
[/autoit] [autoit][/autoit] [autoit]$Differenz = $SystemZeit - $DateiZeit ;Differenz errechnen
[/autoit] [autoit][/autoit] [autoit]If $Differenz > $Stunde Then ;wenn Differenz größer 1 Stunde
FileSetTime($Zusammengesetzt, @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC)
FileMove($Zusammengesetzt, $Ordnerneu[$k] & $Dateien[$l], 9) ;Verschiebt die Datei
FileWriteLine($Log, $Zusammengesetzt & @CRLF) ;Log schreiben
EndIf
EndIf
[/autoit] [autoit][/autoit] [autoit]Next
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetData($Label_Fehler, "Dateien nicht gefunden") ;Fehlerausgabe wenn keine Dateien gefunden werden
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetData($Label_Fehler, "Ordner nicht gefunden") ;Fehlerausgabe wenn kein Ordner gefunden wurde
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]Next
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit]GUICtrlSetData($Label_Fehler, "Keine Ordner gefunden") ;Fehlerausgabe wenn kein Ordner gefunden wurde
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_Vergleich
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _Eintragen()
[/autoit] [autoit][/autoit] [autoit]$Datei = GUICtrlRead($Dateipfad_Input) ;Dateipfad in Variable schreiben
$Verschiebe = GUICtrlRead($Verschiebe_Input) ;Neuen Dateipfad in Variable schreiben
$Endung = GUICtrlRead($Endung_Input) ;Dateiendung in Variable schreiben
$Clear = GUICtrlRead($Clear_Input) ;Zeitraum zum löschen in Variable schreiben
If $Datei <> "" Then ;wenn Dateipfad nicht leer ist
[/autoit] [autoit][/autoit] [autoit]If $Verschiebe <> "" Then ;wenn der neue Dateipfad nicht leer ist
[/autoit] [autoit][/autoit] [autoit]If $Endung <> "" Then ;wenn keine Dateiendung angegeben ist
[/autoit] [autoit][/autoit] [autoit]If StringRegExp($Endung, "\.") Then ;wenn ein Punkt in der Dateiendung enthalten ist
[/autoit] [autoit][/autoit] [autoit]If $Clear <> "" Then ;wenn ein Zeitraum eingetragen wurde
[/autoit] [autoit][/autoit] [autoit]FileWriteLine($File, $Datei & "|" & $Verschiebe & "|" & $Endung & "|" & $Clear & @CRLF) ;Dateipfad in Datei schreiben
_Load() ;Load ausführen
Else
[/autoit] [autoit][/autoit] [autoit]MsgBox(16, "Fehler", "Bitte einen Zeitraum zum löschen der alten Daten angeben") ;wenn kein Zeitraum eingetragen wurde
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit]MsgBox(16, "Fehler", "Die Dateiendung muss einen Punkt enthalten") ;wenn kein Punkt in der Dateiendung enthalten ist
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit]MsgBox(16, "Fehler", "Bitte eine Dateiendung angeben") ;wenn keine Dateiendung angegeben ist
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit]MsgBox(16, "Fehler", "Bitte neues Verzeichnis angeben") ;wenn kein neues Verzeichnis angegeben ist
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]Else
[/autoit] [autoit][/autoit] [autoit]MsgBox(16, "Fehler", "Bitte Dateipfad eintragen") ;wenn kein Dateipfad eingetragen ist
[/autoit] [autoit][/autoit] [autoit]EndIf
[/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_Eintragen
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _Load()
[/autoit] [autoit][/autoit] [autoit]_GUICtrlListView_DeleteAllItems($Listview) ;leert das Listview
[/autoit] [autoit][/autoit] [autoit]ReDim $Ordner[1]
ReDim $Ordner[5000]
_FileReadToArray($File, $Ordner) ;liest die Dateipfade ins Array
[/autoit] [autoit][/autoit] [autoit]For $l = 1 To $Ordner[0] Step 1
GUICtrlCreateListViewItem($Ordner[$l], $Listview) ;in Listview eintragen
Next
ReDim $Ordner[1]
ReDim $Ordner[5000]
ReDim $Ordnerneu[1]
ReDim $Ordnerneu[5000]
ReDim $Endungen[1]
ReDim $Endungen[5000]
ReDim $Loeschen[1]
ReDim $Loeschen[5000]
$k = -1
[/autoit] [autoit][/autoit] [autoit]For $l = 1 To $Ordner[0] Step 1
[/autoit] [autoit][/autoit] [autoit]$k = $k + 1
[/autoit] [autoit][/autoit] [autoit]$Ordner[$l] = _GUICtrlListView_GetItemText($Listview, $k, 0) ;Ordner eintragen
$Ordnerneu[$l] = _GUICtrlListView_GetItemText($Listview, $k, 1) ;Neues Verzeichnis eintragen
$Endungen[$l] = _GUICtrlListView_GetItemText($Listview, $k, 2) ;Dateiendung eintragen
$Loeschen[$l] = _GUICtrlListView_GetItemText($Listview, $k, 3) ;Zeitraum eintragen
Next
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]EndFunc ;==>_Load
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _Delete()
[/autoit] [autoit][/autoit] [autoit]$Del = _GUICtrlListView_GetSelectedIndices($Listview) ;Ausgewählter Eintrag in Del schreiben
If $Del = "" Then
MsgBox(16, "!!!Fehler!!!", "Wählen sie einen Eintrag aus") ;wenn kein Eintrag ausgewählt war
Else
$Del = $Del + 1 ;Del um eins erhöhen
_ArrayDelete($Ordner, $Del) ;Eintrag aus Array löschen
$k = 0 ;Zähler setzen
$d = 0 ;Zähler setzen
FileDelete($File) ;Liste löschen
[/autoit] [autoit][/autoit] [autoit]For $l = 1 To $Ordner[0] Step 1
If $d <> 0 Then ;beim ersten durchlauf nicht durchführen
$k = $k + 1
FileWriteLine($File, $Ordner[$k] & "|" & $Ordnerneu[$k] & "|" & $Endungen[$k] & "|" & $Loeschen[$l] & @CRLF) ;Eitnräge schreiben
EndIf
$d = 1
Next
_Load() ;Daten laden
EndIf
EndFunc ;==>_Delete
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _Ende()
Exit
EndFunc ;==>_Ende
Falls noch jemand Verbesserungsvorschläge hat immer gerne.
Programmname lass ich mir auch gerne einen neuen (passenderen) vorschlagen.