Robocopy also is known as Robust File Copy Command. By using Robocopy Windows Command Line utility we can copy files, directories and even drives too from one location to another location.
Robocopy is a Windows command-line tool used for file and folder Replication.
Robocopy is one of the most-used command-line utilities to copy/sync large volumes of data in Windows.
It’s such a well-liked tool due to how powerful it’s. But it is complex as much as it’s power
Robocopy helps to maintain identical copies of a directory structure on a single PC or in a separate network location.
In this tutorial-Article, we’re going to make it simpler as much as it’s complexity. After reading this complete and ultimate Robocopy guide, You will be able to use Robocopy Command with ease
It’s a replacement to the less versatile xcopy utility.
It allows you to specify a drive path or server path to copy/move files to a command prompt.
Robocopy command is able to classify files by whether they exist in the source directory or in the destination directory, or in both
The versions of Robocopy are as below.
Several versions of Robocopy do not report the version number when executing robocopy /? on the command line.
However, their version is stored inside the executable itself and can be queried with PowerShell for example (gcm robocopy | fl *) or inside Windows Explorer by right-clicking on Robocopy.exe, selecting Properties, then clicking on the Details tab.
Robocopy Commandline utility can
Robocopy command line utility can copy files over a network with resume capabilities ( I personally have used in between India-USA office over VPN and working fine to sync svn repo)
Robocopy command can copy file and directory attributes preserving timestamps
Robocopy command can copy NTFS permissions, owners and auditing info
Robocopy command Can copy directory timestamps
Robocopy Can copy files in ‘backup’ mode to ensure files are copied even those rights have been denied to the administrator
Robocopy command can make Automatic retries,Can sync two folders,Is smart enough to skip files already copied,Can copy paths larger than the 256 character path limit,Perform asynchronous copies using it’s multithreading ability.
Robocopy command can Returns standardized exit codes for use in scripts
A continuously updated command-line progress indicator.
A “mirror” mode, which keeps trees synchronized by also deleting files in the destination that are not present in the source.
Ability to tolerate network interruptions and resume copy (incomplete files are marked with a date stamp of 1980-01-01 and contain a recovery record so Robocopy knows where to continue from).
Ability to copy file data and attributes correctly, and to preserve original timestamps, as well as NTFS ACLs, owner information, and audit information using the /COPYALL or /COPY: command line switches.
Beginning with the XP026 version, the ability to copy folder (or directory) date and timestamps (/DCOPY:T), even with the ability to update folder timestamps (copied from existing folders) on folders already created from previous versions (that did not copy the folder date and timestamps).
Ability to assert the Windows NT “backup right” (/B) so an administrator may copy an entire directory, including files denied readability to the administrator.
Ability to copy paths exceeding 259 characters — up to a theoretical limit of about 32,000 characters — without errors.
Multithreaded copying introduced with Windows 7 and Windows Server 2008 R2.
Return code on program termination for batch file usage.
Usefile names, wildcard characters,paths,or file attributes to include or exclude source files as candidates for copying.
exclude directories by name of by path
delete source files and directories after copying(that is,move rather than copy them)
Delete destination files and directories that no longer exist in the source.
Control the number of times the program retries an operation after encountering a recoverable network error.
Schedule copy jobs to run automatically
Specify when copying is to be performed
Monitor a directory tree for changes.
Robocopy is a command line utility for copying files. This command is available in Vista and Windows 7 by default. For Windows XP and Server 2003 this tool can be downloaded as part of Server 2003 Windows Resource Kit tools. This package is available in the below location.
Run Robocopy Help command robocopy /? And you will have a multiple options.
When you check each section, you will have a more options in each section.
robocopy <Source> <Destination> [<File>[ …]] [<Options>]
|<Source>||Specifies the path to the source directory.|
|<Destination>||Specifies the path to the destination directory.|
|<File>||Specifies the file or files to be copied. You can use wildcard characters (* or ?), if you want. If the File parameter is not specified, *.* is used as the default value.|
|<Options>||Specifies options to be used with the robocopy command.|
|/s||Copies subdirectories. Note that this option excludes empty directories.|
|/e||Copies subdirectories. Note that this option includes empty directories.|
|/lev:<N>||Copies only the top N levels of the source directory tree.|
|/z||Copies files in restartable mode.|
|/b||Copies files in Backup mode.|
|/zb||Uses restartable mode. If access is denied, this option uses Backup mode.|
|/efsraw||Copies all encrypted files in EFS RAW mode.|
|/copy:<CopyFlags>||Specifies the file properties to be copied. The following are the valid values for this option:
T Time stamps
S NTFS access control list (ACL)
O Owner information
U Auditing information
The default value for CopyFlags is DAT (data, attributes, and time stamps).
|/dcopy:<copyflags>||Defines what to copy for directories. Default is DA. Options are D = data, A = attributes, and T = timestamps.|
|/sec||Copies files with security (equivalent to /copy:DATS).|
|/copyall||Copies all file information (equivalent to /copy:DATSOU).|
|/nocopy||Copies no file information (useful with /purge).|
|/secfix||Fixes file security on all files, even skipped ones.|
|/timfix||Fixes file times on all files, even skipped ones.|
|/purge||Deletes destination files and directories that no longer exist in the source.|
|/mir||Mirrors a directory tree (equivalent to /e plus /purge).|
|/mov||Moves files, and deletes them from the source after they are copied.|
|/move||Moves files and directories, and deletes them from the source after they are copied.|
|/a+:[RASHCNET]||Adds the specified attributes to copied files.|
|/a-:[RASHCNET]||Removes the specified attributes from copied files.|
|/create||Creates a directory tree and zero-length files only.|
|/fat||Creates destination files by using 8.3 character-length FAT file names only.|
|/256||Turns off support for very long paths (longer than 256 characters).|
|/mon:<N>||Monitors the source, and runs again when more than N changes are detected.|
|/mot:<M>||Monitors source, and runs again in M minutes if changes are detected.|
|/MT[:N]||Creates multi-threaded copies with N threads. N must be an integer between 1 and 128. The default value for N is 8.
The /MT parameter cannot be used with the /IPG and /EFSRAW parameters.
Redirect output using /LOG option for better performance.
Note: The /MT parameter applies to Windows Server 2008 R2 and Windows 7.
|/rh:hhmm-hhmm||Specifies run times when new copies may be started.|
|/pf||Checks run times on a per-file (not per-pass) basis.|
|/ipg:n||Specifies the inter-packet gap to free bandwidth on slow lines.|
|/sl||Don’t follow symbolic links and instead create a copy of the link.|
File Selection Options
|/a||Copies only files for which the Archive attribute is set.|
|/m||Copies only files for which the Archive attribute is set, and resets the Archive attribute.|
|/ia:[RASHCNETO]||Includes only files for which any of the specified attributes are set.|
|/xa:[RASHCNETO]||Excludes files for which any of the specified attributes are set.|
|/xf <FileName>[ …]||Excludes files that match the specified names or paths. Note that FileName can include wildcard characters (* and ?).|
|/xd <Directory>[ …]||Excludes directories that match the specified names and paths.|
|/xc||Excludes changed files.|
|/xn||Excludes newer files.|
|/xo||Excludes older files.|
|/xx||Excludes extra files and directories.|
|/xl||Excludes “lonely” files and directories.|
|/is||Includes the same files.|
|/it||Includes “tweaked” files.|
|/max:<N>||Specifies the maximum file size (to exclude files bigger than N bytes).|
|/min:<N>||Specifies the minimum file size (to exclude files smaller than N bytes).|
|/maxage:<N>||Specifies the maximum file age (to exclude files older than N days or date).|
|/minage:<N>||Specifies the minimum file age (exclude files newer than N days or date).|
|/maxlad:<N>||Specifies the maximum last access date (excludes files unused since N).|
|/minlad:<N>||Specifies the minimum last access date (excludes files used since N) If N is less than 1900, N specifies the number of days. Otherwise, N specifies a date in the format YYYYMMDD.|
|/xj||Excludes junction points, which are normally included by default.|
|/fft||Assumes FAT file times (two-second precision).|
|/dst||Compensates for one-hour DST time differences.|
|/xjd||Excludes junction points for directories.|
|/xjf||Excludes junction points for files.|
|/r:<N>||Specifies the number of retries on failed copies. The default value of N is 1,000,000 (one million retries).|
|/w:<N>||Specifies the wait time between retries, in seconds. The default value of N is 30 (wait time 30 seconds).|
|/reg||Saves the values specified in the /r and /w options as default settings in the registry.|
|/tbd||Specifies that the system will wait for share names to be defined (retry error 67).|
|/l||Specifies that files are to be listed only (and not copied, deleted, or time stamped).|
|/x||Reports all extra files, not just those that are selected.|
|/v||Produces verbose output, and shows all skipped files.|
|/ts||Includes source file time stamps in the output.|
|/fp||Includes the full path names of the files in the output.|
|/bytes||Prints sizes, as bytes.|
|/ns||Specifies that file sizes are not to be logged.|
|/nc||Specifies that file classes are not to be logged.|
|/nfl||Specifies that file names are not to be logged.|
|/ndl||Specifies that directory names are not to be logged.|
|/np||Specifies that the progress of the copying operation (the number of files or directories copied so far) will not be displayed.|
|/eta||Shows the estimated time of arrival (ETA) of the copied files.|
|/log:<LogFile>||Writes the status output to the log file (overwrites the existing log file).|
|/log+:<LogFile>||Writes the status output to the log file (appends the output to the existing log file).|
|/unicode||Displays the status output as Unicode text.|
|/unilog:<LogFile>||Writes the status output to the log file as Unicode text (overwrites the existing log file).|
|/unilog+:<LogFile>||Writes the status output to the log file as Unicode text (appends the output to the existing log file).|
|/tee||Writes the status output to the console window, as well as to the log file.|
|/njh||Specifies that there is no job header.|
|/njs||Specifies that there is no job summary.|
|/job:<JobName>||Specifies that parameters are to be derived from the named job file.|
|/save:<JobName>||Specifies that parameters are to be saved to the named job file.|
|/quit||Quits after processing command line (to view parameters).|
|/nosd||Indicates that no source directory is specified.|
|/nodd||Indicates that no destination directory is specified.|
|/if||Includes the specified files.|
Exit (return) codes
|0||No files were copied. No failure was encountered. No files were mismatched. The files already exist in the destination directory; therefore, the copy operation was skipped.|
|1||All files were copied successfully.|
|2||There are some additional files in the destination directory that are not present in the source directory. No files were copied.|
|3||Some files were copied. Additional files were present. No failure was encountered.|
|5||Some files were copied. Some files were mismatched. No failure was encountered.|
|6||Additional files and mismatched files exist. No files were copied and no failures were encountered. This means that the files already exist in the destination directory.|
|7||Files were copied, a file mismatch was present, and additional files were present.|
|8||Several files did not copy.|
Note: Any value greater than 8 indicates that there was at least one failure during the copy operation.
To copy two files from folder
c:\xyz, the following syntax is used:
robocopy c:\xyz c:\xyz test1.txt test2.db
Copy All PDFs
robocopy c:\xyz c:\xyz *.pdf
To copy all files (not directories) in the “xyz” directory to the “xyz2” directory
robocopy c:\xyz c:\xyz2
Robocopy Command to copy all files and folders (including empty ones) will be copied from the “xyz” directory to the “xyz2” directory
robocopy c:\xyz c:\xyz2 /e
Robocopy command to mirror what is in c:\xyz into c:\xyz2 and purge any files in the xyz2 directory that do not exist in the XYZ directory. Becareful when yoou use /mir switch since it is deleting files that do not match in the destination directory.
robocopy c:\xyz c:\xyz2 /MIR
robocopy c:\xyz c:\xyz2 /MIR /Sec (copy permissions too)
robocopy c:\xyz c:\xyz2 /MIR /Sec /w:0 /r:0 ( wasting time on re-tries use w:0 and r:0 flag to skip if unable to copy due to any reason. )
Robocopy command to copy any of the files in the xyz directory on the network computer named PC1 to the current computer xyz2 directory.
robocopy \\PC1\xyz C:\xyz2
To get logs in a file and console too
robocopy c:\xyz c:\xyz2 /MIR /Sec /w:0 /r:0 /log:c:\Logs\xyz.log (To get logs in a file)
robocopy c:\xyz c:\xyz2 /MIR /Sec /w:0 /r:0 /log:c:\Logs\xyz.log /tee (To get log in a console)
To exclude folder
robocopy c:\xyz c:\xyz2 /MIR /Sec /w:0 /r:0 /log:c:\Logs\xyz.log /tee /XD “\\PC1\xyz\~snapshot (To exclude snapshot folder)
I have tried to cover Robocopy command in depth. I hope It will be useful to my readers. Comments and suggestions are always appreciated! I want to add Robocopy GUI and some useful ROBOCOPY Scripts too. But it will become more lengthy. So I will write and share later.