We help IT Professionals succeed at work.

How would i do a complete folder compare and copy difference in autoit

1,631 Views
Last Modified: 2014-01-06
I have a folder out on a networkshare lets call it c
i want to copy all of its contents over to a computer i'm settings up and ONLY copy files to the computer that are not there or different on the networkshare.

so lets say i have c:\backup.bat  on the networkshare
i want it to be the exact same on the new computer.

the exact same structure and and subdirectory structure should apply

i have something like this already in vb but it doesn't check for existance or differences.

'Copy Folder Structure
        bkwrk.ReportProgress(0, "0|0|Getting Folder Structure (mis/" & sMachine & ")...")
        iMaxCnt = My.Computer.FileSystem.GetDirectories("\\mis\mis3\machines\" & sMachine & "\c\", FileIO.SearchOption.SearchAllSubDirectories, "*.*").Count
        For Each strFolders In My.Computer.FileSystem.GetDirectories("\\mis\mis3\machines\" & sMachine & "\c\", FileIO.SearchOption.SearchAllSubDirectories, "*.*")
            iCurCnt = iCurCnt + 1
            sDestination = "C:\" & Mid(strFolders, InStr(strFolders, "\C\") + 3, strFolders.Length - InStr(strFolders, "\C\"))
            bkwrk.ReportProgress(iCurCnt / iMaxCnt * 100, iCurCnt & "|" & iMaxCnt & "|Creating Folder: " & sDestination) 'Strings.Left(strFolders, 10) & "..." & Strings.Right(strFolders, 15))
            My.Computer.FileSystem.CopyDirectory(strFolders, sDestination, True)
        Next
        'Copy Program Files
        bkwrk.ReportProgress(0, "0|0|Getting Files (mis/" & sMachine & ")...")
        iCurCnt = 0
        iMaxCnt = My.Computer.FileSystem.GetFiles("\\mis\mis3\machines\" & sMachine & "\c\", FileIO.SearchOption.SearchAllSubDirectories, "*.*").Count
        For Each StrFiles In My.Computer.FileSystem.GetFiles("\\mis\mis3\twmachines\" & sMachine & "\c\", FileIO.SearchOption.SearchAllSubDirectories, "*.*")
            iCurCnt = iCurCnt + 1
            sDestination = "C:\" & Mid(StrFiles, InStr(StrFiles, "\C\") + 3, StrFiles.Length - InStr(StrFiles, "\C\"))
            bkwrk.ReportProgress(iCurCnt / iMaxCnt * 100, iCurCnt & "|" & iMaxCnt & "|Copying File: " & sDestination) 'Strings.Left(StrFiles, 10) & "..." & Strings.Right(StrFiles, 15))
            My.Computer.FileSystem.CopyFile(StrFiles, sDestination, True)
        Next

Open in new window

Comment
Watch Question

strivoliIT Manager
CERTIFIED EXPERT

Commented:
Why not using RoboCopy instead?
CERTIFIED EXPERT

Commented:
If you have the latest version of AutoIT use the _FileListToArrayRec function (see AutoIT Help File for more info), I've used this quite extensively in the past.  Here is an example of the code (note not tested).

#include <file.au3>
;~ Get System Drive Letter for %SystemDrive% Enviroment Variable of local machine
$_DIR_SYSDRIVE = EnvGet('SystemDrive')
;~ Get Server Share Name to copy contents from
$_DIR_NETDRIVE = '\\mis\mis3\machines\' & @ComputerName & '\c'

;~ Create an Array (files/folders), including subdirectories, use relative path name i.e. Folder\Filename.exe
$_ARR_SYSDRIVE = _FileListToArrayRec($_DIR_NETDRIVE, '*', 0, 1, 0, 1)
;~ Create an Array (files/folders), including subdirectories, use full path name i.e. \\mis\mis3\machines\ComputerName\c\Folder\Filename.exe
	;~ Exit if no array is created from the shared network
	If @error = 1 Then Exit
$_ARR_NETDRIVE = _FileListToArrayRec($_DIR_NETDRIVE, '*', 0, 1, 0, 2)
	;~ Exit if no array is created from the shared network
	If @error = 1 Then Exit

;~ Go through the full folder list and check that it doesn't exist on the local machine if not found copy the file and create the directory if necessary.
For $x = 1 To $_ARR_NETDRIVE[0]
	If StringInStr($_ARR_NETDRIVE[$x], $_ARR_SYSDRIVE[$x]) And FileExists($_DIR_SYSDRIVE & '\' & $_ARR_SYSDRIVE[$x]) = 0 Then
		FileCopy($_ARR_NETDRIVE[$x], $_DIR_SYSDRIVE & '\' & $_ARR_SYSDRIVE[$x], 8)
	EndIf
Next

Open in new window

Author

Commented:
matrixnz,
that makes sense and all but how would i check to see if it is new. not so much of exist thats a given.
I was thinking something like this maybe ?
RunWait(@ComSpec & " /c " & 'xcopy "' & '\\fileserv\e\apps\c\' & '" "' & 'c:\' & '" /D /E /C /R

Open in new window

strivoliIT Manager
CERTIFIED EXPERT
Commented:
This one is on us!
(Get your first solution completely free - no credit card required)
UNLOCK SOLUTION

Author

Commented:
stivoli,
i was looking at robocopy but i don't really understand how to make it check path1 against path2 and copy accordingly.

What my goal is to take and copy all the files on the share \\share\c to the root of the local machine
and only copy files that do not exist or are different on the \\share\c

thanks!
CERTIFIED EXPERT
Commented:
This one is on us!
(Get your first solution completely free - no credit card required)
UNLOCK SOLUTION

Author

Commented:
i gave points to matrixnz because his is what i was seeking. i gave 50 for the effort to the other member. Thanks!

Gain unlimited access to on-demand training courses with an Experts Exchange subscription.

Get Access
Why Experts Exchange?

Experts Exchange always has the answer, or at the least points me in the correct direction! It is like having another employee that is extremely experienced.

Jim Murphy
Programmer at Smart IT Solutions

When asked, what has been your best career decision?

Deciding to stick with EE.

Mohamed Asif
Technical Department Head

Being involved with EE helped me to grow personally and professionally.

Carl Webster
CTP, Sr Infrastructure Consultant
Empower Your Career
Did You Know?

We've partnered with two important charities to provide clean water and computer science education to those who need it most. READ MORE

Ask ANY Question

Connect with Certified Experts to gain insight and support on specific technology challenges including:

  • Troubleshooting
  • Research
  • Professional Opinions
Unlock the solution to this question.
Join our community and discover your potential

Experts Exchange is the only place where you can interact directly with leading experts in the technology field. Become a member today and access the collective knowledge of thousands of technology experts.

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.