Jump to content

Search in a folder and cycle through subfolders to find the latest file


Hyflex
 Share

Recommended Posts

Hey Guys,

I've been looking around and can't find anything close to this other than knowing I'd need to use _FileListToArray and FileGetTime.

  • I want to search the folder: C:/Folder/
  • Look inside ALL subfolders which which will be Year - Month (Example: 2014 - August or 2014 - September)
  • Look inside all subfolders but IGNORE the folder: "Other" (These folders will be First, Second, Third and Other but the folder(s) may or may not exist)
  • Search in the folders First, Second, Third BUT IGNORE Other, Find and retrieve the latest filename of a .csv file that has been put into any of those three folders, once found it also needs to retreive the filename of the latest .csv from the Full folder.
So if it searches the folders and finds the latest file is in:

C:/Folder/2014 - August/Second/example.csv (Modified/Created 16/10/2014 @ 01:59)

Then it needs to go into the Full folder that accompanies it and find the latest file in that folder:

C:/Folder/2014 - August/Second//Full/mynewexample.csv (Modified/Created 16/10/2014 @ 02:00) <-- Even though the modified time is the latest it should find latest file(s) based on the folder above...

 

It would return two variables: $var1 = example.csv and $var2 = mynewexample.csv

 

Folder Structure:

C:/Folder/
|--------- C:/Folder/2014 - August/
|     |--------- C:/Folder/2014 - August/Other/ (Ignore This Folder)
|     |           |--------- C:/Folder/2014 - August/Other/Full/ (As a child of above, ignore this folder too)
|     |--------- C:/Folder/2014 - August/First/
|     |           |--------- C:/Folder/2014 - August/First/Full/
|     |--------- C:/Folder/2014 - August/Second/
|     |           |--------- C:/Folder/2014 - August/Second/Full/
|     |--------- C:/Folder/2014 - August/Third/
|     |           |--------- C:/Folder/2014 - August/Third/Full/
|-------- C:/Folder/2014 - September/
      |--------- C:/Folder/2014 - September/Other/ (Ignore This Folder)
      |           |--------- C:/Folder/2014 - September/Other/Full/ (As a child of above, ignore this folder too)
      |--------- C:/Folder/2014 - September/First/
      |           |--------- C:/Folder/2014 - September/First/Full/
      |--------- C:/Folder/2014 - September/Second/
      |           |--------- C:/Folder/2014 - September/Second/Full/
      |--------- C:/Folder/2014 - September/Third/
                  |--------- C:/Folder/2014 - September/Third/Full/
Could someone help me with this, I've spent the last 2 hours trying to find something close to what I want on the forum/google and come up with nothing :S Edited by Hyflex
Link to comment
Share on other sites

I am sure if you searched site: autoitscript.com search files newest you would find a plethora of posts. You're not the first one to ask this.

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

For a start you'll want to look at...

_FileListToArrayRec

Ahh, that one helps a lot!

 

I've ran into a problem already though, I'm struggling to exclude certain folders...

 

$aArray = _FileListToArrayRec("C:\Folder", "*||Other|Other2", $FLTAR_FILES , $FLTAR_RECUR, $FLTAR_SORT, $FLTAR_FULLPATH)
$fTime = 0

For $i = 0 To UBound($aArray) - 1

    If StringLeft(FileGetTime($aArray[$i], 0, 1), 8) > $fTime Then
        $fTime = StringLeft(FileGetTime($aArray[$i], 0, 1), 8)
        $fName = $aArray[$i]
    EndIf

Next

ConsoleWrite( $ftime & " " & $fname & @CRLF)
I've tried *||Other|Other2 and *||Other||Other2 but I can't get it to exclude both "Other" and "Other2"
Link to comment
Share on other sites

  • Moderators

Hyflex,

From the Help file:

 

Multiple filters must be separated by ";"

So try: ;)

_FileListToArrayRec("C:\Folder", "*||Other;Other2", .....)
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

Hyflex,

From the Help file:

 

Multiple filters must be separated by ";"

So try: ;)

_FileListToArrayRec("C:\Folder", "*||Other;Other2", .....)
M23

My bad, I didn't/couldn't see that anywhere:

I did fix it a hacky way:

$aArray = _FileListToArrayRec("C:\Folder", "*||Other", $FLTAR_FILES , $FLTAR_RECUR, $FLTAR_SORT, $FLTAR_FULLPATH)
$fTime = 0

For $i = 0 To UBound($aArray) - 1

    If StringLeft(FileGetTime($aArray[$i], 0, 1), 8) > $fTime Then
        If Not StringInStr($aArray[$i], "\Other2\") Then
            $fTime = StringLeft(FileGetTime($aArray[$i], 0, 1), 8)
            $fName = $aArray[$i]
        EndIf
    EndIf

Next
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...