determine if file changed

Posted on 2008-10-19
Last Modified: 2010-04-30
I am trying to create a file backup, but only want to overwrite files that have changed
How can i do this without using FSO ?
Question by:isnoend2001
LVL 45

Accepted Solution

aikimark earned 125 total points
ID: 22753884
you could use the file attribute to determine if the file has been modified and needs archiving.  to see this most easily, issue the following command:

with XCOPY, this is the /A flag

you can use the VB DIR() function to retrieve file names in a directory.  then you would concatenate the directory name and the file name as a parameter to the VB GetAttr() function.  see snippet example

Note:  If using the VB FileCopy statement, you will need to use the SetAttr statement to indicate you've created a backup.

strFilename = Dir(strPath & "*.*", vbNormal)

Do Until Len(strFilename) = 0

  FName = strPath & strFilename

  lngHasChanged = GetAttr(FName) And vbArchive

  If lngHasChanged = vbArchive Then

    ' create file backup

  End If

  strFilename = Dir


Open in new window

LVL 76

Assisted Solution

by:David Lee
David Lee earned 125 total points
ID: 22754034
Hi, isnoend2001.

You can use WMI.  A query like the one below will return all files that have their archive bit set.
On Error Resume Next

Const wbemFlagReturnImmediately = &h10

Const wbemFlagForwardOnly = &h20

arrComputers = Array(".")

For Each strComputer In arrComputers


   WScript.Echo "=========================================="

   WScript.Echo "Computer: " & strComputer

   WScript.Echo "=========================================="

   Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")

   Set colItems = objWMIService.ExecQuery("SELECT * FROM CIM_DataFile WHERE Archive='True'", "WQL", wbemFlagReturnImmediately + wbemFlagForwardOnly)

   For Each objItem In colItems

      WScript.Echo "AccessMask: " & objItem.AccessMask

      WScript.Echo "Archive: " & objItem.Archive

      WScript.Echo "Caption: " & objItem.Caption

      WScript.Echo "Compressed: " & objItem.Compressed

      WScript.Echo "CompressionMethod: " & objItem.CompressionMethod

      WScript.Echo "CreationClassName: " & objItem.CreationClassName

      WScript.Echo "CreationDate: " & WMIDateStringToDate(objItem.CreationDate)

      WScript.Echo "CSCreationClassName: " & objItem.CSCreationClassName

      WScript.Echo "CSName: " & objItem.CSName

      WScript.Echo "Description: " & objItem.Description

      WScript.Echo "Drive: " & objItem.Drive

      WScript.Echo "EightDotThreeFileName: " & objItem.EightDotThreeFileName

      WScript.Echo "Encrypted: " & objItem.Encrypted

      WScript.Echo "EncryptionMethod: " & objItem.EncryptionMethod

      WScript.Echo "Extension: " & objItem.Extension

      WScript.Echo "FileName: " & objItem.FileName

      WScript.Echo "FileSize: " & objItem.FileSize

      WScript.Echo "FileType: " & objItem.FileType

      WScript.Echo "FSCreationClassName: " & objItem.FSCreationClassName

      WScript.Echo "FSName: " & objItem.FSName

      WScript.Echo "Hidden: " & objItem.Hidden

      WScript.Echo "InstallDate: " & WMIDateStringToDate(objItem.InstallDate)

      WScript.Echo "InUseCount: " & objItem.InUseCount

      WScript.Echo "LastAccessed: " & WMIDateStringToDate(objItem.LastAccessed)

      WScript.Echo "LastModified: " & WMIDateStringToDate(objItem.LastModified)

      WScript.Echo "Manufacturer: " & objItem.Manufacturer

      WScript.Echo "Name: " & objItem.Name

      WScript.Echo "Path: " & objItem.Path

      WScript.Echo "Readable: " & objItem.Readable

      WScript.Echo "Status: " & objItem.Status

      WScript.Echo "System: " & objItem.System

      WScript.Echo "Version: " & objItem.Version

      WScript.Echo "Writeable: " & objItem.Writeable




Open in new window


Author Closing Comment

ID: 31507609
Thanks guys

Featured Post

Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

Join & Write a Comment

Introduction While answering a recent question ( in the VB classic zone, I wrote some VB code in the (Office) VBA environment, rather than fire up my older PC.  I didn't post completely correct code o…
When designing a form there are several BorderStyles to choose from, all of which can be classified as either 'Fixed' or 'Sizable' and I'd guess that 'Fixed Single' or one of the other fixed types is the most popular choice. I assume it's the most p…
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now