Get Latest File

I was helping out in the MSN Groups scripting forum recently. The admin needed to find the latest file or most recently modified file in a folder. That sounded reasonable to me so I put together a function and short script that uses it. I thought I’d share it here:

'GetLatestFile.vbsstrDir="S:"WScript.Echo "The newest file is " & GetLatestFile(strDir)

Function GetLatestFile(strDir)'Returns the full path and file name of the file that'was most recently modified. This function will Not'recurse through subdirectories.

On Error Resume NextSet objFSO=CreateObject("Scripting.FileSystemObject")If objFSO.FolderExists(strDir) Then

    Set objFldr=objFSO.GetFolder(strDir)    Set colFiles=objFldr.Files

    strLatest=""    dtLatest="01/01/1900 12:00:00 AM"

    For Each file In colFiles        If CDate(file.DateLastModified) > CDate(dtLatest) Then         strLatest=file.path        dtLatest=file.DateLastModified        End If    Next

    GetLatestFile=strLatestElse    GetLatestFile="Directory Not Found"End If

End Function
 

The real “trick” to the script is to convert the DateLastModified property to a Date using CDate. Otherwise, the script tries to compare strings and you get some pretty weird and unexpected results. As written, this function will not recurse through subdirectories. Although you could make that modification.  It also searches all file types.  If you wanted to be more restrictive, say find the last Word document, you could either parse out the extension from the filename and only check .DOC or you could check the Type property of the file. This property will be something like “Microsoft Office Word 97 – 2003 Document”.

You could also modify this function to return all files that had been modified since a certain date. Here’s one possible modification:

 

dtCutOff="02/15/2007 12:00:00 AM"

    For Each file In colFiles        If CDate(file.DateLastModified) > CDate(dtCutoff) Then         strLatest=strLatest & "," & file.path        End If    Next

    'strip off leading comma    strLatest=Mid(strLatest,2)    GetLatestFile=strLatest

Now you’ll get a comma separated list of all files that have been modified since 2/15/2007.

So kick it around. If you come up with some tweaks, post a comment.

Post to Twitter Post to Plurk Post to Yahoo Buzz Post to Delicious Post to Digg Post to Facebook Post to FriendFeed Post to Google Buzz Post to Ping.fm Post to Reddit Post to Slashdot Post to StumbleUpon Post to Technorati

This entry was posted in Scripting and tagged , , . Bookmark the permalink.

2 Responses to Get Latest File

  1. Vinicius Canto says:

    Powershell Version:

    (ls | sort creationtime -desc)[0]

    Thank you!


    Vinicius Canto
    MVP Visual Developer – Scripting
    MCP Windows 2000 Server, Windows XP e SQL Server 2000
    Blog sobre scripting: http://viniciuscanto.blogspot.com

  2. Jeffery Hicks says:

    So many things like this are much easier in PowerShell. Which in fact was my first inclination. But since he had a larger VBScript he was working on that’s what I had to work with. But it is very apparent that you can get much more done with less code in PowerShell than VBScript.

    Thanks for the tip.