Hi Leute,
Ich habe hier mal ein Skript, das Dateien, die ein bestimmtes min/max Alter haben, auflistet. UDF wäre wohl zu viel, auch wenn ich einen entsprechenden Header erstellt habe. Kritik wird gerne angenommen.
EDIT: Thread weiter lesen. Unten finden sich bessere Funktionen!
AutoIt
#include-once
; #FUNCTION# =======================================================================================================================================================
; Title .........: _ListFilesByAge
; AutoIt Version : 3.3.15.0 (Beta)
; Description ...: Lists files with specific age limits
; Syntax.........: _ListFilesByAge( $sSearchFolder [, $iAge = -1 [, $iAgeAndOlder = 1 [, $iSort = 0 [, $sUnit = "d" [, $iRecursiveSearch = 0 [, iFullPath = 1 [, $sFileListFullPath = ""]]]]]]] )
; Parameters ....: $iAge - Name of the service.
; $iAgeAndOlder - 0 = all files
; 1 = all files older than $iAge
; 2 = all files newer than $iAge
; $iSort - 0 = no sorting
; 1 = sort in descending order
; 2 = sort in ascending order
; $sUnit - time unit. Valid units of _DateDiff (y = years, m = months, w = weeks, d = days, h = hours, n = minutes, s = seconds)
; $iTimestampType - defines which timestamp is used.
; 0 = creation time
; 1 = last modification time
; 2 = last access time
; $iRecursiveSearch - 0 = only files in given folder
; 1 = lists files in given folder and files in subfolders
; $iFullPath - 0 = file name only
; 1 = full file path
; $sFileListFullPath - full path to a text file, with all found files. If empty, no textfile ist created.
;
; Return values .: Success - array with all found files.
; Failure - error message
; Sets @error = 1
; Author ........: autoiter
; Link ..........:
; Example .......:
;~ Local $aReturnedFiles = _ListFilesByAge(@DesktopDir, 5, 1, 2, "d", 1, 0, 1)
;~ If @error Then MsgBox(0, @error, $aReturnedFiles)
;~ _ArrayDisplay($aReturnedFiles)
; ==================================================================================================================================================================
#include <File.au3>
#include <Date.au3>
Func _ListFilesByAge($sSearchFolder, $iAge = -1, $iAgeAndOlder = 1, $iSort = 0, $sUnit = "d", $iTimestampType = 0, $iRecursiveSearch = 0, $iFullPath = 1, $sFileListFullPath = "")
If Number($iAge) = 0 Then Return SetError(1, "", "Invalid value for $iAge")
If $iAgeAndOlder <> 0 And $iAgeAndOlder <> 1 And $iAgeAndOlder <> 2 Then Return SetError(1, "", "Invalid value for $iAgeAndOlder")
If $iSort <> 0 And $iSort <> 1 And $iSort <> 2 Then Return SetError(1, "", "Invalid value for $iSort")
If $sUnit <> "d" And $sUnit <> "y" And $sUnit <> "m" And $sUnit <> "w" And $sUnit <> "h" And $sUnit <> "m" And $sUnit <> "s" Then Return SetError(1, "", "Invalid unit")
If $iTimestampType <> 0 And $iTimestampType <> 1 And $iTimestampType <> 2 Then Return SetError(1, "", "Invalid value for $iTimestampType")
If $iRecursiveSearch <> 0 And $iRecursiveSearch <> 1 Then Return SetError(1, "", "Invalid value for $iRecursiveSearch")
If $iFullPath <> 0 And $iFullPath <> 1 Then Return SetError(1, "", "Invalid value for $iFullPath")
If $sFileListFullPath <> "" Then
Local $hFileOpen = FileOpen($sFileListFullPath, 10)
If @error Then Return SetError(1, "", "FileOpen error. Couldn't create: " & $sFileListFullPath)
EndIf
Local $aFiles = _FileListToArrayRec($sSearchFolder, "*", $FLTAR_FILES, $iRecursiveSearch, 0, $FLTAR_FULLPATH)
If @error Then
If $sFileListFullPath <> "" Then
FileClose($hFileOpen)
FileDelete($sFileListFullPath)
EndIf
Return SetError(1, "", "_FileListToArrayRec error. Error value: " & @error)
EndIf
If $iTimestampType = 0 Then
$iTimestampType = $FT_CREATED
ElseIf $iTimestampType = 1 Then
$iTimestampType = $FT_MODIFIED
ElseIf $iTimestampType = 2 Then
$iTimestampType = $FT_ACCESSED
EndIf
Local $aReturnedFiles[$aFiles[0] + 1][3]
If $iAgeAndOlder = 0 Then
$aReturnedFiles = __ListFilesByAge_AllFiles($aFiles, $iAge, $sUnit, $iTimestampType, $aReturnedFiles)
ElseIf $iAgeAndOlder = 1 Then
$aReturnedFiles = __ListFilesByAge_OldFiles($aFiles, $iAge, $sUnit, $iTimestampType, $aReturnedFiles)
ElseIf $iAgeAndOlder = 2 Then
$aReturnedFiles = __ListFilesByAge_NewFiles($aFiles, $iAge, $sUnit, $iTimestampType, $aReturnedFiles)
EndIf
If $aReturnedFiles = 0 Then Return SetError(1, "", "No hits")
If $iSort = 1 Then
_ArraySort($aReturnedFiles, 0, 0, 0, 2)
ElseIf $iSort = 2 Then
_ArraySort($aReturnedFiles, 1, 0, 0, 2)
EndIf
_ArrayColDelete($aReturnedFiles, 2)
If $iFullPath = 0 Then $aReturnedFiles = __ListFilesByAge_DeletePaths($aReturnedFiles)
If $sFileListFullPath <> "" Then
_FileWriteFromArray($hFileOpen, $aReturnedFiles)
FileClose($hFileOpen)
EndIf
Return $aReturnedFiles
EndFunc ;==>_ListFilesByAge
; #following funtions internal use only# ===========================================================================================================
Func __ListFilesByAge_AllFiles($aFiles, $iAge, $sUnit, $iTimestampType, $aReturnedFiles)
Local $aFileTime, $sFileTime, $iDateCalc, $iCount = 0
For $i = 1 To $aFiles[0]
$aFileTime = FileGetTime($aFiles[$i], $iTimestampType)
$sFileTime = $aFileTime[0] & "/" & $aFileTime[1] & "/" & $aFileTime[2] & " " & $aFileTime[3] & ":" & $aFileTime[4] & ":" & $aFileTime[5]
$iDateCalcDay = _DateDiff($sUnit, $sFileTime, _NowCalc())
$iDateCalcSec = _DateDiff('s', $sFileTime, _NowCalc())
$aReturnedFiles[$iCount][0] = $aFiles[$i]
$aReturnedFiles[$iCount][1] = $sFileTime
$aReturnedFiles[$iCount][2] = $iDateCalcSec
$iCount += 1
Next
ReDim $aReturnedFiles[$iCount][3]
Return $aReturnedFiles
EndFunc ;==>__ListFilesByAge_AllFiles
Func __ListFilesByAge_OldFiles($aFiles, $iAge, $sUnit, $iTimestampType, $aReturnedFiles)
Local $aFileTime, $sFileTime, $iDateCalc, $iCount = 0
For $i = 1 To $aFiles[0]
$aFileTime = FileGetTime($aFiles[$i], $iTimestampType)
$sFileTime = $aFileTime[0] & "/" & $aFileTime[1] & "/" & $aFileTime[2] & " " & $aFileTime[3] & ":" & $aFileTime[4] & ":" & $aFileTime[5]
$iDateCalcDay = _DateDiff($sUnit, $sFileTime, _NowCalc())
$iDateCalcSec = _DateDiff('s', $sFileTime, _NowCalc())
If $iDateCalcDay >= $iAge Then
$aReturnedFiles[$iCount][0] = $aFiles[$i]
$aReturnedFiles[$iCount][1] = $sFileTime
$aReturnedFiles[$iCount][2] = $iDateCalcSec
$iCount += 1
EndIf
Next
If $iCount = 0 Then Return 0
ReDim $aReturnedFiles[$iCount][3]
Return $aReturnedFiles
EndFunc ;==>__ListFilesByAge_OldFiles
Func __ListFilesByAge_NewFiles($aFiles, $iAge, $sUnit, $iTimestampType, $aReturnedFiles)
Local $aFileTime, $sFileTime, $iDateCalc, $iCount = 0
For $i = 1 To $aFiles[0]
$aFileTime = FileGetTime($aFiles[$i], $iTimestampType)
$sFileTime = $aFileTime[0] & "/" & $aFileTime[1] & "/" & $aFileTime[2] & " " & $aFileTime[3] & ":" & $aFileTime[4] & ":" & $aFileTime[5]
$iDateCalcDay = _DateDiff($sUnit, $sFileTime, _NowCalc())
$iDateCalcSec = _DateDiff('s', $sFileTime, _NowCalc())
If $iDateCalcDay <= $iAge Then
$aReturnedFiles[$iCount][0] = $aFiles[$i]
$aReturnedFiles[$iCount][1] = $sFileTime
$aReturnedFiles[$iCount][2] = $iDateCalcSec
$iCount += 1
EndIf
Next
If $iCount = 0 Then Return 0
ReDim $aReturnedFiles[$iCount][3]
Return $aReturnedFiles
EndFunc ;==>__ListFilesByAge_NewFiles
Func __ListFilesByAge_DeletePaths($aReturnedFiles)
Local $aString
For $i = 0 To UBound($aReturnedFiles) - 1
$aString = StringSplit($aReturnedFiles[$i][0], "\")
$aReturnedFiles[$i][0] = $aString[$aString[0]]
Next
Return $aReturnedFiles
EndFunc ;==>__ListFilesByAge_DeletePaths
Alles anzeigen