Jump to content

Sort files in dir by date and time in its names


tibcho
 Share

Recommended Posts

Hello scripters! I need to write a simple app which sort files in a directory by its names and keep only last 50. Auto delete the oldest files when more than 50 copies. Here are some filenames:

...

works12-30-12_10-55-30.tar.gz

sales12-21-12_14-03-49.tar.gz

names12-30-12_05-45-00.tar.gz

homes12-31-12_14-59-50.tar.gz

data01-01-13_21-05-30.tar.gz

cust01-01-13_21-55-18.tar.gz

...

and here are my function for split names:

Func SplitNames($s)
$sStrip = StringRegExpReplace($s,"[a-zA-Z.]","") ;remove all letters and "."
Local $x = StringSplit($sStrip, "_") ;split date and time from "_"
Global $fDate = StringRegExpReplace($x[1], '(\d{2})-(\d{2})-(\d{2})', '$2.$1.$3') ;transfer MM-DD-YY to DD.MM.YYYY
Global $fTime = StringRegExpReplace($x[2], '-', ':') ;transfer 00-00-00 to 00:00:00
EndFunc

SplitNames("data12-30-11_10-50-30.tar.gz")
ConsoleWrite($fDate & @CR) ;Result: 30.12.11
ConsoleWrite($fTime & @CR) ;Result: 10:50:30

I need sort the names like this (desync date+time) and keep only 50 (newest) of it, others delete:

cust01-01-13_21-55-18.tar.gz

data01-01-13_21-05-30.tar.gz

homes12-31-12_14-59-50.tar.gz

works12-30-12_10-55-30.tar.gz

names12-30-12_05-45-00.tar.gz

sales12-21-12_14-03-49.tar.gz

...

Please help me and thanks for any ideas or snippets!

Edited by tibcho
Link to comment
Share on other sites

Look at _RecFileListToArray by Melba23.

UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Link to comment
Share on other sites

  • Moderators

tibcho,

I would do something like this: ;)

#include <Array.au3>

; Simulate reading the filenames into an array - we would use _FileListToArray($sPath, "*.gz", 1)
Global $aList[7] = [6, "works12-30-12_10-55-30.tar.gz", "sales12-21-12_14-03-49.tar.gz", "names12-30-12_05-45-00.tar.gz", _
            "homes12-31-12_14-59-50.tar.gz", "data01-01-13_21-05-30.tar.gz", "cust01-01-13_21-55-18.tar.gz"]

; Create a 2D array of the correct size
Global $aList_2D[UBound($aList)][2]

; Now loop through the list and add tha full filenames and the extracted DTG to the new array
For $i = 1 To $aList[0]
    ; First the filename
    $aList_2D[$i][0] = $aList[$i]
    ; Now the DTG - I assume the dates are currently in the abominable MM-DD-YY_HH-mm-SS format so we reorder them into YYMMDDHHmmSS
    $aList_2D[$i][1] = StringRegExpReplace($aList[$i], ".*(\d\d).(\d\d).(\d\d).(\d\d).(\d\d).(\d\d).*", "$3$1$2$4$5$6")
Next

; Now sort the second column to get the latest files to the top
_ArraySort($aList_2D, 1, 1, 0, 1)

; And here we have the result - just for interest
_ArrayDisplay($aList_2D)

; Now you just need to loop through the sorted array and delete all the files from 51 down
For $i = 51 To $aList[0]
    FileDelete($sPath & $aList_2D[$i][0]
Next

Please ask if you have any questions. :)

M23

Edit: Welcome to the AutoIt forum, by the way. :)

Edited by Melba23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

  • Moderators

tibcho,

Glad I could help. :)

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...