Robway
Robway

Reputation: 1

VB Script to move files around based on date changed

I am looking to write a VB script to keep a folder tidy up. The rules are:

This is what I have so far:

strFolder = "c:\testdelete"
objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strFolder)
Set colFiles = objFolder.Files
For Each objFile In colFiles
  If DateDiff("N",objFile.DateLastModified,Now()) > 4320 Then
    objFSO.DeleteFile(objFile),True  End if  Next

This however is not working.

Upvotes: 0

Views: 5235

Answers (2)

Ansgar Wiechers
Ansgar Wiechers

Reputation: 200213

Iterate over the files in the folder while

  • building a list of the files modified at least 2 days ago, and
  • checking if a file was modified today.

Something like this should work:

Set fso = CreateObject("Scripting.FileSystemObject")

Set oldFiles = CreateObject("System.Collections.ArrayList")

today     = Date
threshold = Date - 1

fileModifiedToday = False
For Each f In fso.GetFolder("C:\some\folder").Files
  If f.DateLastModified >= today Then fileModifiedToday = True
  If f.DateLastModified < threshold Then oldFiles.Add f
Next

If fileModifiedToday Then
  For Each f In oldFiles
    f.Move "C:\other\folder\"
  Next
End If

Upvotes: 2

Rich
Rich

Reputation: 4170

So to compare the dates of the file and the current day you can utilize the DateValue() Function which returns only the date of the DateTime variable. Then you can utilize the MoveFile command which works like objFSO.MoveFile(FileObject, DestinationFolder)

Dim strFolder, Dest
On Error Resume Next 'Move to manual error handling. 
strFolder = "c:\testdelete"
Dest = "C:\testmove"
Dim objFSO, objFolder, colFiles, objFile
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFSO.GetFolder(strFolder)  
Set colFiles = objFolder.Files  
For Each objFile In colFiles  
  If DateValue(objFile.DateLastModified) = DateValue(Now) Then
    objFSO.MoveFile(objFile, Dest)
    if err.number <> 0 then msgbox "Destination does not exist"
    err.clear
  ElseIf DateDiff("N",objFile.DateLastModified,Now()) > 4320 Then       
    objFSO.DeleteFile(objFile,True)
    if err.number <> 0 then msgbox "Unable to delete file"
    err.clear
  End if  
Next 

Upvotes: 0

Related Questions