ZnilTools:DeleteFilesOlderThan.exe
Aus znilwiki
Download
Download: DeleteFileOlderThan.zip
Programmhilfe
+------------------------------------------------------------------------------ | DeleteFileOlderThan.exe - Version 1.0.0.0 +------------------------------------------------------------------------------ | 2014 von Bernhard Linz für http://znil.net - Kontakt: Bernhard@znil.net +------------------------------------------------------------------------------ Ich bin fast an der Aufgabe verzweifelt auf einer Netzwerkfreigabe eine Datei zu löschen wenn diese älter als x Tage ist ... Das Paradewerkzeug forfiles kann NICHT mit UNC Pfaden umgehen ... und Robocopy NICHT mit einzelnen Dateien Also habe ich das hier geschrieben. Man übergibt dem Programm eine Datei und eine Anzahl von Tagen - und wenn die Datei älter ist wird diese gelöscht --------------------------------------------------------------------------- Aufruf: DeleteFileOlderThan.exe <Optionen> <Pfad zu Datei> Optionen: --------- /? oder -? : Diese Hilfe Anzeigen /D:x : Anzahl von Tagen. Ist die Datei älter als hier angegeben wird die Datei gelöscht. /D: MUSS der 1. Parameter sein! Es zählt das Änderungsdatum! Pfad : Pfad zur Datei, ggf. in " " setzen. Der Pfad MUSS der 2 Parameter sein! /TEST : Testmodus. Statt zu löschen wir nur das Alter der Datei ausgegeben Parameter ist Optional - und wenn MUSS dieser der 3. Paramerter sein +------------------------------------------------------------------------------ | DeleteFilesOlderThan.exe ist FREEWARE! | Kopieren, weitergeben ausdrücklich erlaubt! | Die jeweils aktuelleste Version und Anleitungen findet Ihr unter: | http://http://znil.net/index.php?title=ZnilTools +------------------------------------------------------------------------------
Quellcode
In AutoIt geschrieben:
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=Icon256-32.ico
#AutoIt3Wrapper_UseUpx=n
#AutoIt3Wrapper_Change2CUI=y
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#Region ;************ Includes ************
#Include <Date.au3>
#EndRegion ;************ Includes ************
Opt('MustDeclareVars', 1)
; 10 20 30 40 50 60 70 80
; 12345678901234567890123456789012345678901234567890123456789012345678901234567890
Dim $s_Header = _
"+------------------------------------------------------------------------------" & @CRLF & _
"| DeleteFileOlderThan.exe - Version " & FileGetVersion(@ScriptName) & @CRLF & _
"+------------------------------------------------------------------------------" & @CRLF & _
"| 2014 von Bernhard Linz für http://znil.net - Kontakt: Bernhard@znil.net" & @CRLF & _
"+------------------------------------------------------------------------------" & @CRLF & _
@CRLF
; 10 20 30 40 50 60 70 80
; 12345678901234567890123456789012345678901234567890123456789012345678901234567890
Dim $s_HilfeText = _
"Ich bin fast an der Aufgabe verzweifelt auf einer Netzwerkfreigabe eine Datei zu löschen" & @CRLF & _
"wenn diese älter als x Tage ist ... Das Paradewerkzeug forfiles kann NICHT mit" & @CRLF & _
"UNC Pfaden umgehen ... und Robocopy NICHT mit einzelnen Dateien" & @CRLF & _
"Also habe ich das hier geschrieben. Man übergibt dem Programm eine Datei und eine" & @CRLF & _
"Anzahl von Tagen - und wenn die Datei älter ist wird diese gelöscht" & @CRLF & _
"---------------------------------------------------------------------------" & @CRLF & _
@CRLF & _
"Aufruf: " & @CRLF & _
@CRLF & _
@ScriptName & " <Optionen> <Pfad zu Datei>" & @CRLF & _
@CRLF & _
"Optionen:" & @CRLF & _
"---------" & @CRLF & _
" /? oder -? : Diese Hilfe Anzeigen" & @CRLF & _
@CRLF & _
" /D:x : Anzahl von Tagen. Ist die Datei älter als hier angegeben wird" & @CRLF & _
" die Datei gelöscht. /D: MUSS der 1. Parameter sein!" & @CRLF & _
" Es zählt das Änderungsdatum!" & @CRLF & _
' Pfad : Pfad zur Datei, ggf. in " " setzen.' & @CRLF & _
" Der Pfad MUSS der 2 Parameter sein!" & @CRLF & _
" /TEST : Testmodus. Statt zu löschen wir nur das Alter der Datei ausgegeben" & @CRLF & _
" Parameter ist Optional - und wenn MUSS dieser der 3. Paramerter sein" & @CRLF & _
@CRLF & _
"+------------------------------------------------------------------------------" & @CRLF & _
"| DeleteFilesOlderThan.exe ist FREEWARE!" & @CRLF & _
"| Kopieren, weitergeben ausdrücklich erlaubt!" & @CRLF & _
"| Die jeweils aktuelleste Version und Anleitungen findet Ihr unter:" & @CRLF & _
"| http://http://znil.net/index.php?title=ZnilTools" & @CRLF & _
"+------------------------------------------------------------------------------" & @CRLF
Dim $i_Days
Dim $i_Tage
Dim $a_dateizeit
; ###################################################################################
; F U N C T I O N E N / S U B R O U T I N E N
; ###################################################################################
; ###################################################################################
; _ANSI2OEM löst das Problem mit dem Umlauten und anderen Sonderzeichen. Es wandelt Text so um das er korrekt in der DOS-Box dargestellt wird
; So können hier im Quellcode auch Umlaute verwendet werden (in den Textausgaben) und diese werden dann korrekt dargestellt
; Wir zudem für die Prüfung der Gruppenzugehörigkeit benötigt für Gruppen mit Umlauten, z.B. Domänen-Admins
; Dank an Xenobiologist von AutoIt.de für diese Lösung: http://www.autoit.de/index.php?page=Thread&threadID=9461&highlight=ANSI2OEM
Func _ANSI2OEM($text)
$text = DllCall('user32.dll', 'Int', 'CharToOem', 'str', $text, 'str', '')
Return $text[2]
;Return $text
EndFunc ;==>_ANSI2OEM
; ###################################################################################
; Hilfsroutine die den Hilfetext ausgibt
Func _HilfeAusgeben()
ConsoleWrite(_ANSI2OEM($s_Header))
ConsoleWrite(_ANSI2OEM($s_HilfeText))
EndFunc ;==>_HilfeAusgeben
;testen ob wir überhaupt mit einem Parameter gestartet wurden - sonst Hilfe ausgeben
If $CmdLine[0] = 0 Or $CmdLine[0] < 2 Then
ConsoleWrite(_ANSI2OEM("Fehler: nicht genügent Parameter!") & @CRLF)
ConsoleWrite(@CRLF)
_HilfeAusgeben()
Exit 1
EndIf
;testen ob der Parameter 1 ist auf "/?" testen und ebenfalls Hilfe ausgeben
If $CmdLine[1] = "/?" Then
_HilfeAusgeben()
Exit 0
EndIf
If StringLeft($CmdLine[1],3) = "/D:" Then
$i_Days = Int(StringMid($CmdLine[1],StringLen("/D:") + 1))
If $i_Days = 0 Then
ConsoleWrite(_ANSI2OEM("Fehler: Anzahl der Tag wurde als 0 (NULL) erkannt. Muss mindestens 1 sein!") & @CRLF)
Exit 1
EndIf
EndIf
If FileExists($CmdLine[2]) = 0 Then
ConsoleWrite(_ANSI2OEM("Fehler: Datei wurde nicht gefunden: " & $CmdLine[2]) & @CRLF)
Exit 1
EndIf
$a_dateizeit = FileGetTime($CmdLine[2],0) ; 0 = geändert
$i_Tage = _DateDiff("D", $a_dateizeit[0] & "/" & $a_dateizeit[1] & "/" & $a_dateizeit[2] & " " & $a_dateizeit[3] & ":" & $a_dateizeit[4] & ":" & $a_dateizeit[5], _NowCalc())
; $sType Auswählen, wie die Differenz zurückgegeben werden soll:
; D - in Tagen
; M - in Monaten
; Y - in Jahren
; w - in Wochen
; h - in Stunden
; n - in Minuten
; s - in Sekunden
If $CmdLine[0] = 3 Then
If $CmdLine[3] = "/TEST" Then
ConsoleWrite(_ANSI2OEM("Datei folgende Anzahl von Tagen alt:" & $i_Tage) & @CRLF)
Exit 0
EndIf
EndIf
If $i_Tage > $i_Days Then
ConsoleWrite(_ANSI2OEM("Datei ist älter als " & $i_Days & " Tage, lösche Datei: " & $CmdLine[2]) & @CRLF)
If FileDelete($CmdLine[2]) = 1 Then
ConsoleWrite(_ANSI2OEM("Datei erfolgreich gelöscht!") & @CRLF)
Exit 0
Else
ConsoleWrite(_ANSI2OEM("Fehler: Datei konnte nicht gelöscht werden") & @CRLF)
Exit 1
EndIf
EndIf
Exit 0
--Bernhard Linz 17:10, 20. Okt. 2014 (CEST)
Kommentare
Loading comments...