compare contents of two folders

S

Steve

Morning folks.
I'm looking to compare the contents of two directories, and then output the
results to either a text file, or an excel file.
We'd tried using a batch command set that we'd found online, but it did not
provide the output we'd desired.
Most of what I'm finding out there are code comparison programs, and vba
code to check the contents of files, as well as subdirectory comparitors.

My goal is to simply check to see if the work done so far is being
duplicated or not; thus I want to compare the contents of two folders.
Thank you.
 
G

Gary''s Student

Do you only need to know if the same files are in both folders or do the
versions (timedate stamps) of the files need to be the same?
 
S

Steve

Mainly if the same files exist.
Although, now that you mention it, knowing the other info would indeed be
helpful.
 
G

Gary''s Student

Put the first folder path in A1 and the second folder path in B1 and run
TestListFilesInFolder:

Sub TestListFilesInFolder()
Application.ScreenUpdating = False
ListFilesInFolder Range("A1").Value, False, 1
ListFilesInFolder Range("B1").Value, False, 2
Application.ScreenUpdating = True
End Sub

Sub ListFilesInFolder(SourceFolderName As String, IncludeSubfolders As
Boolean, kolumn As Integer)
Dim FSO As Scripting.FileSystemObject
Dim SourceFolder As Scripting.Folder, SubFolder As Scripting.Folder
Dim FileItem As Scripting.File
Dim r As Long, k As Integer
MsgBox (SourceFolderName & kolumn)
Set FSO = New Scripting.FileSystemObject
Set SourceFolder = FSO.GetFolder(SourceFolderName)
r = Cells(Rows.Count, kolumn).End(xlUp).Row + 1
k = kolumn
For Each FileItem In SourceFolder.Files
Cells(r, k).Value = FileItem.Path
r = r + 1
Next FileItem

If IncludeSubfolders Then
For Each SubFolder In SourceFolder.SubFolders
ListFilesInFolder SubFolder.Path, True, kolumn
Next SubFolder
End If
Set FileItem = Nothing
Set SourceFolder = Nothing
Set FSO = Nothing
End Sub

The files will be listed below the folder paths.

Adapted from Joel Rubin's Site:

http://www.exceltip.com/st/List_fil...Runtime_using_VBA_in_Microsoft_Excel/446.html
 
S

Steve

S-w-eeeeet!!!
Thank you!!!
I've bookmarked the link for future reference as well.
Yet Another satisfied customer.....
 
S

Steve

I have another question for you....
I went in to the ExcelTips page you gave me, and have made some
modifications to Joe's macro.
I've set it up so that I could only choose specific attributes/properties of
the file, for the two directories.
Which means that I had to essentially duplicate the ListFilesInFolder code,
but make it input the values one column to the right of the source column. I
have yet to further study your sample, so that's what I could be missing.
Please see my question down below the code....

'*******************code***********************

Sub TestListFilesInFolder()
Workbooks.Add ' create a new workbook for the file list
' add headers
With range("A1")
.Formula = "Folder contents:"
.Font.Bold = True
.Font.size = 12
End With
range("A3:b3").Formula = "File Name:"
range("c3:d3").Formula = "File Size:"
range("e3:f3").Formula = "Date Created:"
range("g3:h3").Formula = "Date Last Modified:"

range("A3:H3").Font.Bold = True
ListFilesInFolder "N:\Steve'sTemp\New", True
ListFilesOnFolder "N:\Steve'sTemp\Old", True
' list all files included subfolders
End Sub
'===================================
Sub ListFilesInFolder(SourceFolderName As String, IncludeSubfolders As
Boolean)
' lists information about the files in SourceFolder
' example: ListFilesInFolder "C:\FolderName\", True
Dim FSO As Scripting.FileSystemObject
Dim SourceFolder As Scripting.folder, SubFolder As Scripting.folder
Dim FileItem As Scripting.File
Dim r As Long
Set FSO = New Scripting.FileSystemObject
Set SourceFolder = FSO.GetFolder(SourceFolderName)
r = range("A65536").End(xlUp).Row + 1
For Each FileItem In SourceFolder.Files
' display file properties
Cells(r, 1).Formula = FileItem.Name
Cells(r, 3).Formula = FileItem.size
Cells(r, 5).Formula = FileItem.DateCreated
Cells(r, 7).Formula = FileItem.DateLastModified

' use file methods (not proper in this example)
' FileItem.Copy "C:\FolderName\Filename.txt", True
' FileItem.Move "C:\FolderName\Filename.txt"
' FileItem.Delete True
r = r + 1 ' next row number
Next FileItem
If IncludeSubfolders Then
For Each SubFolder In SourceFolder.SubFolders
ListFilesInFolder SubFolder.Path, True
Next SubFolder
End If
Columns("A:H").AutoFit
Set FileItem = Nothing
Set SourceFolder = Nothing
Set FSO = Nothing
ActiveWorkbook.Saved = True
End Sub
'================================================

Sub ListFilesOnFolder(SourceFolderName As String, IncludeSubfolders As
Boolean)
' lists information about the files in SourceFolder
' example: ListFilesInFolder "C:\FolderName\", True
Dim FSO As Scripting.FileSystemObject
Dim SourceFolder As Scripting.folder, SubFolder As Scripting.folder
Dim FileItem As Scripting.File
Dim r As Long
Set FSO = New Scripting.FileSystemObject
Set SourceFolder = FSO.GetFolder(SourceFolderName)
r = 0
r = range("A65536").End(xlUp).Row + 1 ' this appears to be where my
'issue originates.
For Each FileItem In SourceFolder.Files
' display file properties
Cells(r, 2).Formula = FileItem.Name
Cells(r, 4).Formula = FileItem.size
Cells(r, 6).Formula = FileItem.DateCreated
Cells(r, 8).Formula = FileItem.DateLastModified

' use file methods (not proper in this example)
' FileItem.Copy "C:\FolderName\Filename.txt", True
' FileItem.Move "C:\FolderName\Filename.txt"
' FileItem.Delete True

r = r + 1 ' next row number
Next FileItem
If IncludeSubfolders Then
For Each SubFolder In SourceFolder.SubFolders
ListFilesInFolder SubFolder.Path, True
Next SubFolder
End If
Columns("A:H").AutoFit
Set FileItem = Nothing
Set SourceFolder = Nothing
Set FSO = Nothing
ActiveWorkbook.Saved = True
End Sub
'******************end of code*********************
As you can see, it will input the second directory's file names in the
column to the right of the first.
However, instead of placing them adjacent, it takes in to account the
already counted r, and sets the second set down the number of rows, for the
number of files.
I set a watch, and the second, ListFilesOnFolder, starts counting at the
bottom of the range selected by r.


i.e., r = range("A65536").End(xlUp).Row + 1

How would I set this to start at the same row, as did the ListFilesInFolder
began?

Beyond that, this is working as needed (that is until we find yet another
use which would require further modifications-- but that's another day ....
;-) ).

Again, thank you.
Best.
 
S

Steve

Never mind.... I figured it out-- about two minutes after I clicked post.
Again, thank you for all your help.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top