Aktionen

ZnilTools:DeleteFilesOlderThan.exe

Aus znilwiki

1 Download

Download: DeleteFileOlderThan.zip



Important.png
Hinweis: Dieses programm kann nur EINE Datei löschen! Dafür auch auf UNC-Pfaden

2 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
+------------------------------------------------------------------------------




3 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)


4 Kommentare


kontakt@duerr-edv.eu

32 Monaten zuvor
Punktzahl 0++

wäre toll, wenn es möglich wäre Platzhalter für den Dateinamen zu verwenden da in meinem Fall der Dateiname nicht immer gleich bleibt. So etwas wie:

DeleteFileOlderThan.exe c:\test\*.txt

Tobi

8 Monaten zuvor
Punktzahl 0++

Da macht doch wenig Sinn?

If $CmdLine[0] = 0 Or $CmdLine[0] < 2 Then

BLinz

8 Monaten zuvor
Punktzahl 0++
Naja, es funktioniert. Ist von 2014, inzwischen löse ich es anders und teste nur noch selten starr nach Position. Der Test auf 0 kann natürlich weg.
Kommentar hinzufügen
znilwiki freut sich über alle Kommentare. Sofern du nicht anonym bleiben möchtest, trage deinen Namen oder deine Email-Adresse ein oder melde dich an. Du kannst das Feld auch einfach leer lassen.