tibcho Posted December 30, 2012 Share Posted December 30, 2012 (edited) 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.gzsales12-21-12_14-03-49.tar.gznames12-30-12_05-45-00.tar.gzhomes12-31-12_14-59-50.tar.gzdata01-01-13_21-05-30.tar.gzcust01-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:30I 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.gzdata01-01-13_21-05-30.tar.gzhomes12-31-12_14-59-50.tar.gzworks12-30-12_10-55-30.tar.gznames12-30-12_05-45-00.tar.gzsales12-21-12_14-03-49.tar.gz...Please help me and thanks for any ideas or snippets! Edited December 30, 2012 by tibcho Link to comment Share on other sites More sharing options...
guinness Posted December 30, 2012 Share Posted December 30, 2012 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 parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018 Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted December 30, 2012 Moderators Share Posted December 30, 2012 (edited) 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 December 30, 2012 by Melba23 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 columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
tibcho Posted December 30, 2012 Author Share Posted December 30, 2012 Work great and very fast and simple Thank you a lot Melba23 you are the best =) Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted December 30, 2012 Moderators Share Posted December 30, 2012 tibcho, Glad I could help. M23 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 columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now