Description

When faced with comparing for example, a proposed software vendor that is an entire directory.  Rather than wait for them to explain what files they might have changed, I doctored up the below powershell code that will do the job (Disclaimer – Use at your own risk!)

You can compare non-readable files (ie gifs) but the output won't be of much value, just the fact that you'll know the images are different.

Script

PowerShell
Edit|Remove
#Demo-Listen Compare a List of Two Directories for discrepencies in their plain-text content 
#July 2011 http://blog.demo-listen.com 
# 
 
#Below you can add in the file extensions you would like to search 
$fileExtensionsToSearch = @(‘*.txt’,'*.php’,'*.xml’,'*.js’,'*.htm’,'*.css’,'*.html’,'*.gif’) 
 
# Choose your directory of reference 
$source = get-childitem C:\…\Directory1 -Include @($fileExtensionsToSearch)` 
-recurse -force | foreach-object -process { $_.FullName } 
 
# Choose your directory of new data 
$vendor = get-childitem C:\asdf\Directory2 -Include @($fileExtensionsToSearch)` 
-recurse -force | foreach-object -process { $_.FullName } 
    
    $filecount = 0 
    do 
    { 
    #You can comment out the write-hosts below if you prefer less verbose information during the comparisons 
    write-host ‘Comparing file number:’($filecount+1) ‘of’ $vendor.Length 
    write-host ‘Comparing file names:’$vendor[$filecount]‘and’ $source[$filecount] 
    #write-host $vendor[$filecount] 
    Compare-Object -ReferenceObject $(get-content $source[$filecount]) -DifferenceObject $(get-content $vendor[$filecount]) 
    $filecount++ 
    } 
    while ($filecount -le ($vendor.Length-1)) 
    
    # If you find a file with differences, you can further look at just two files by putting the paths in below and uncommenting both lines 
    # This will give a line by line comparison of both files 
    # the extra variable is because the number zero is the first number used, and in the above code 
    # that’s reworked in the write-host so it’s more readable to me 
    # you can always take this out, just ensure the while less than stays at a length of -1 
    
    #$filenumber = 162 
    #Compare-Object -ReferenceObject $(get-content $source[($filenumber -1)]) -DifferenceObject $(get-content $vendor[($filenumber -1)]) -IncludeEqual -SyncWindow