Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using VBScript to find most recent file date in a single folder

How could I modify this VBScript to return only the newest file's name and Last Modified date? Currently it returns anything modified in the last 24 hours. I want to look for the most recent file only. I borrowed this from StackOverflow, not yet a VBScript wizard.

option explicit  
dim fileSystem, folder, file
dim path   
path = "C:\test"  
Set fileSystem = CreateObject("Scripting.FileSystemObject") 
Set folder = fileSystem.GetFolder(path) 
for each file in folder.Files         
if file.DateLastModified > dateadd("h", -24, Now) then         
'whatever you want to do to process'         
WScript.Echo file.Name & " last modified at " & file.DateLastModified     
end if
next 
like image 523
mikeclemson Avatar asked Feb 09 '12 03:02

mikeclemson


1 Answers

For working with files on VBScript it is recommended you use the FileSystemObject.

The FileSystemObject has the following feature's that help you solve your problem:

  • FileSystemObject.GetFolder - Returns a Folder object corresponding to the folder in a specified path.
  • Folder.Files - Returns a Files collection consisting of all File objects contained in the specified folder.
  • File.DateLastModified - Returns the date and time that the specified file or folder was last modified.

To demonstrate, I have supplied an implementation of GetRecentFile (and GetRecentFolder) which scans the supplied input path and determines the most recent file by finding the file that has the greatest DateLastModified property.

Option Explicit  

Function GetRecentFile(path)
  Dim fso, file
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set GetRecentFile = Nothing
  For Each file in fso.GetFolder(path).Files
    If GetRecentFile is Nothing Then
      Set GetRecentFile = file
    ElseIf file.DateLastModified > GetRecentFile.DateLastModified Then
      Set GetRecentFile = file
    End If
  Next
End Function

Function GetRecentFolder(path)
  Dim fso, folder
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set GetRecentFolder = Nothing
  For Each folder in fso.GetFolder(path).SubFolders
    If GetRecentFolder is Nothing Then
      Set GetRecentFolder = folder
    ElseIf folder.DateLastModified > GetRecentFolder.DateLastModified Then
      Set GetRecentFolder = folder
    End If
  Next
End Function

Dim recentFile
Set recentFile = GetRecentFolder("C:\Temp")
If recentFile is Nothing Then
  WScript.Echo "No recent files found"
Else
  WScript.Echo "Recent file is " & recentFile.Name & " " & recentFile.DateLastModified
End If

References:

  • https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/filesystemobject-object
  • https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/getfolder-method
  • https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/files-property
  • https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/datelastmodified-property
like image 56
Stephen Quan Avatar answered Jan 03 '23 10:01

Stephen Quan