-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRoboCopyScriptTemplate.bat
More file actions
379 lines (322 loc) · 12.8 KB
/
RoboCopyScriptTemplate.bat
File metadata and controls
379 lines (322 loc) · 12.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
@ECHO OFF
setlocal enableextensions enabledelayedexpansion
CLS
REM -------------------------------------------------------------------------------
REM ORDER OF SECTIONS
REM :COMMENTS
REM :CHANGE_LOG
REM :COPY_DESTINATION_AND_SOURCE
REM :AUTHENTICATE_TO_REMOTE_SERVER
REM :INCLUDE_FILETYPES
REM :EXCLUDE_FILETYPES
REM :SILENT_MODE
REM :NUMBER_OF_THREADS
REM :NUMBER_OF_RETRIES
REM :WAIT_TIME
REM :SWITCHES_USED
REM :CREATE_HELPFILE
REM :SHOW_HELPFILE
REM :LOGFILE_NAME
REM :ERROR_CHECKING
REM :VERIFY_BEFORE_PROCEEDING
REM :EXECUTE_THE_COPY
REM :ERRORS
REM :EOF
REM -------------------------------------------------------------------------------
:COMMENTS
REM THIS SCRIPT FOR ROBOCOPY JOBS.
REM THIS SCRIPT REQUIRES ROBOCOPY.EXE TO BE IN THE SAME FOLDER.
REM THE LOG FILE FOR THIS SCRIPT IS GENERATED IN THE
REM FOLDER THE SCRIPT IS RUN FROM AND THE DESTINATION FOLDER.
REM AUTHOR TONY BURROWS - SCRIPTING@TIGERGUPPY.COM
REM -------------------------------------------------------------------------------
:CHANGE_LOG
REM 10/12/12 - INITIAL SCRIPT
REM 10/13/12 - ADDED OPTION TO SHOW HELP FILE AND SWITCHES IN USE.
REM 10/14/12 - ADDED LABELS FOR EACH SECTION
REM 10/20/12 - ADDED EXCLUDE FILE TYPES
REM 11/05/12 - BUG FIXES
REM 07/30/15 - BUG FIX WITH SPACES IN THE SCRIPT FILE NAME
REM 02/29/16 - ADD CHECKING FOR ROBOCOPY.EXE IN LOCAL FOLDER AND %SYSTEMROOT%\SYSTEM32 FOLDER
REM 02/29/16 - ADDED CHECKING FOR SOURCE AND DESTINATION POINTING TO THE SAME LOCATION
REM 02/29/16 - ADJUSTED WINDOW SIZING AND ADDED A WINDOW TITLE BASED ON THE LOG FILENAME
REM 03/16/16 - ADD INCLUDE_FILETYPES
REM 06/23/16 - ADD REMOTE SERVER AUTHENTICATION, BUG FIX (LOGFILES FOLDER INCORRECTLY CREATED IF DIR PATH HAD SPACES)
REM 12/20/18 - ADDED /PURGE & /MT AS A DEFAULT SWITCHES. ADDED THREADS VARIABLE TO CONTROL THE NUMBER OF THREADS TO USE.
REM -------------------------------------------------------------------------------
:COPY_DESTINATION_AND_SOURCE
REM COPY_SOURCE :: Source Directory (drive:\path or \\server\share\path).
REM COPY_DESTINATION :: Destination Dir (drive:\path or \\server\share\path).
REM DO NOT PUT THE TRAILING \ AT THE END OF THE SOURCE OR DESTINATION.
REM IE: IF THE SOURCE IS AT THE ROOT OF THE H DRIVE, ENTER H: NOT H:\
REM \\FOLDER_SHARE OR \\FOLDER_SHARE\FOLDER OR \\ OR E: OR E:\FOLDER\SUB_FOLDER
SET COPY_SOURCE=\\SERVER\SHARE\PATH
SET COPY_DESTINATION=H:
REM -------------------------------------------------------------------------------
:AUTHENTICATE_TO_REMOTE_SERVER
REM AUTHENTICATE TO REMOTE SERVER
ECHO AUTHENTICATING WITH REMOTE SERVER(S)
REM NET USE \\server1.domain.tld /user:domain\username password
REM NET USE \\server2.domain.tld /user:domain\username password
REM -------------------------------------------------------------------------------
:INCLUDE_FILETYPES
REM WHAT FILE TYPES TO INCULDE? USE * FOR WILDCARD.
REM IF THERE ARE NO FILE TYPES TO INCLUDE, ENTER "FALSE" WITHOUT THE QUOTES.
REM THIS IS USED TO BE SELECTIVE TO ONLY COPY FILES BASED ON THEIR EXTENSION.
SET INCLUDE_FILETYPES=FALSE
REM -------------------------------------------------------------------------------
:EXCLUDE_FILETYPES
REM WHAT FILE TYPES TO EXCULDE? USE * FOR WILDCARD.
REM IF THERE ARE NO FILE TYPES TO EXCLUDE, ENTER "FALSE" WITHOUT THE QUOTES.
REM THIS IS USED TO IGNORE FILES BASED ON THEIR EXTENSION.
SET EXCLUDE_FILETYPES=FALSE
REM -------------------------------------------------------------------------------
:SILENT_MODE
REM SILENT MODE DISABLES USER INTERACTION. ALSO IT CREATES A
REM LOG FILE HOWEVER CONSOLE OUTPUT IS MINIMIZED.
REM THIS MUST BE SET TO TRUE OR FALSE
SET SILENT_MODE=FALSE
REM -------------------------------------------------------------------------------
:NUMBER_OF_THREADS
REM NUMBER OF THREADS.
REM /MT[:n] :: Do multi-threaded copies with n threads (default 8).
REM n must be at least 1 and not greater than 128.
REM This option is incompatible with the /IPG and /EFSRAW options.
REM Redirect output using /LOG option for better performance.
SET THREADS=64
REM -------------------------------------------------------------------------------
:NUMBER_OF_RETRIES
REM NUMBER OF RETRIES ON A FAILED COPY
SET RETRIES=1
REM -------------------------------------------------------------------------------
:WAIT_TIME
REM WAIT TIME BETWEEN RETRIES IN SECONDS
SET WAIT=1
REM -------------------------------------------------------------------------------
:SWITCHES_USED
REM WHAT SWITCHES ARE TO BE USED?
REM DO NOT USE /R OR /W, THEY ARE ADDED ELSEWHERE.
REM SEE THE SECTIONS "SHOW HELP FILE" AND "CREATE HELP FILE"
REM FOR ALL SWITCHES AND WHAT THEY DO.
REM HERE IS A LIST OF COMMON SWITCHES
SET BASE_SWITCHES=/E /V /NP /FP /XJ /PURGE /MT:%THREADS%
REM BASE SWITCHES
REM /E :: copy subdirectories, including Empty ones.
REM /ZB :: use restartable mode; if access denied use Backup mode.
REM /V :: produce Verbose output, showing skipped files.
REM /NP :: No Progress - don't display % copied.
REM /FP :: include Full Pathname of files in the output.
REM /COPYALL :: COPY ALL file info
REM /XJ :: eXclude Junction points. (normally included by default).
REM /PURGE :: delete dest files/dirs that no longer exist in source.
REM /MT[:n] :: Do multi-threaded copies with n threads (default 8).
REM n must be at least 1 and not greater than 128.
REM This option is incompatible with the /IPG and /EFSRAW options.
REM Redirect output using /LOG option for better performance.
REM /MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).
REM /MOVE :: MOVE files AND dirs (delete from source after copying).
IF %SILENT_MODE% == TRUE (
SET AUX_SWITCHES=
) ELSE (
SET AUX_SWITCHES=/TEE
)
REM AUX SWITCHES
REM /TEE :: output to console window, as well as the log file.
SET SWITCHES=%BASE_SWITCHES% %AUX_SWITCHES%
REM -------------------------------------------------------------------------------
:CREATE_HELPFILE
REM THIS MUST BE SET TO TRUE OR FALSE
REM THIS WILL CREATE A HELP FILE AND EXIT THE SCRIPT WITHOUT EXECUTING THE COPY
SET CREATE_HELPFILE=FALSE
SET HELP_FILENAME="%~dp0\RoboCopy_Help.txt"
IF %CREATE_HELPFILE% == TRUE (
IF EXIST %HELP_FILENAME% DEL %HELP_FILENAME%
ROBOCOPY.EXE /? >> %HELP_FILENAME%
GOTO :ROBOCOPY_HELP
)
REM -------------------------------------------------------------------------------
:SHOW_HELPFILE
REM THIS MUST BE SET TO TRUE OR FALSE
REM THIS WILL SHOW A HELP FILE AND CONTINUE THE SCRIPT.
SET SHOW_HELPFILE=FALSE
SET TEMPFILENAME="%~dp0\HELPFILETEMP.TXT"
IF %SHOW_HELPFILE% == TRUE (
ECHO SWITCHES IN USE ON THIS SCRIPT: %SWITCHES% > %TEMPFILENAME%
ROBOCOPY.EXE /? >> %TEMPFILENAME%
%WINDIR%\NOTEPAD.EXE %TEMPFILENAME%
DEL %TEMPFILENAME%
)
REM -------------------------------------------------------------------------------
:LOGFILE_NAME
REM GET DATE & TIME
REM THE LOG FILE WILL HAVE THE FILENAME OF THE DATE & TIME THIS SCRIPT IS RUN
REM AS WELL AS THE FILENAME OF THE SCRIPT.
REM EXAMPLE 101212-205935-robocopy.log
IF %TIME:~0,2% LEQ 9 (
SET LOGFILE=%DATE:~4,2%%DATE:~7,2%%DATE:~-2%-0%TIME:~1,1%%TIME:~3,2%%TIME:~6,2%-%~n0
) ELSE (
SET LOGFILE=%DATE:~4,2%%DATE:~7,2%%DATE:~-2%-%TIME:~0,2%%TIME:~3,2%%TIME:~6,2%-%~n0
)
REM Strip spaces
For %%# in (%LOGFILE%) do (
SET LOGFILE=%%~n#
SET LOGFILE=!LOGFILE!
SET LOGFILE=!LOGFILE: =!
)
REM Add file extension
SET LOGFILE=%LOGFILE%.log
REM -------------------------------------------------------------------------------
:ERROR_CHECKING
REM CHECK TO MAKE SURE THE SOURCE, DESTINATION AND ROBOCOPY.EXE EXIST
IF NOT EXIST "%COPY_SOURCE%"\*.* GOTO SOURCE_ERROR
IF NOT EXIST "%COPY_DESTINATION%"\*.* MKDIR "%COPY_DESTINATION%"
IF NOT EXIST "%COPY_DESTINATION%"\*.* GOTO DESTINATION_ERROR
IF "%COPY_SOURCE%" == "%COPY_DESTINATION%" GOTO LOOP_ERROR
IF NOT EXIST ROBOCOPY.EXE (
IF NOT EXIST %SYSTEMROOT%\SYSTEM32\ROBOCOPY.EXE (
GOTO ROBOCOPY_ERROR
)
)
REM -------------------------------------------------------------------------------
:VERIFY_BEFORE_PROCEEDING
REM ADJUST WINDOW SETTINGS
TITLE %LOGFILE%
CALL SET_WINDOW_PARMS 100 50 100 32766
REM DISPLAY INFO TO USER SO THEY CAN VERIFY IT
CLS
ECHO VERIFY THE FOLLOWING BEFORE PROCEEDING:
ECHO.
ECHO COPY SOURCE....................: %COPY_SOURCE%
ECHO COPY DESTINATION...............: %COPY_DESTINATION%
ECHO.
ECHO NUMBER OF RETRIES..............: %RETRIES%
ECHO WAIT SECONDS IN BETWEEN RETRIES: %WAIT%
ECHO COPY SWITCHES..................: %SWITCHES%
ECHO FILE TYPES TO EXCLUDE..........: %EXCLUDE_FILETYPES%
ECHO LOGFILE........................: %LOGFILE%
ECHO.
ECHO THIS IS THE COMMAND THAT WILL BE RUN:
ECHO.
IF %EXCLUDE_FILETYPES% == FALSE (
IF %INCLUDE_FILETYPES% == FALSE (
ECHO ROBOCOPY.EXE "%COPY_SOURCE%" "%COPY_DESTINATION%" %SWITCHES% /R:%RETRIES% /W:%WAIT% /LOG:%LOGFILE%
) ELSE (
ECHO ROBOCOPY.EXE "%COPY_SOURCE%" "%COPY_DESTINATION%" %INCLUDE_FILETYPES% %SWITCHES% /R:%RETRIES% /W:%WAIT% /LOG:%LOGFILE%
)
) ELSE (
IF %INCLUDE_FILETYPES% == FALSE (
ECHO ROBOCOPY.EXE "%COPY_SOURCE%" "%COPY_DESTINATION%" %SWITCHES% /R:%RETRIES% /W:%WAIT% /LOG:%LOGFILE% /XF %EXCLUDE_FILETYPES%
) ELSE (
ECHO ROBOCOPY.EXE "%COPY_SOURCE%" "%COPY_DESTINATION%" %INCLUDE_FILETYPES% %SWITCHES% /R:%RETRIES% /W:%WAIT% /LOG:%LOGFILE% /XF %EXCLUDE_FILETYPES%
)
)
ECHO.
ECHO CLOSE THIS WINDOW NOW OR
ECHO HIT ANY KEY TO CONTINUE...
IF NOT %SILENT_MODE% == TRUE (
PAUSE > NUL
)
CLS
REM -------------------------------------------------------------------------------
:EXECUTE_THE_COPY
IF %EXCLUDE_FILETYPES% == FALSE (
IF %INCLUDE_FILETYPES% == FALSE (
ROBOCOPY.EXE "%COPY_SOURCE%" "%COPY_DESTINATION%" %SWITCHES% /R:%RETRIES% /W:%WAIT% /LOG:%LOGFILE%
) ELSE (
ROBOCOPY.EXE "%COPY_SOURCE%" "%COPY_DESTINATION%" %INCLUDE_FILETYPES% %SWITCHES% /R:%RETRIES% /W:%WAIT% /LOG:%LOGFILE%
)
) ELSE (
IF %INCLUDE_FILETYPES% == FALSE (
ROBOCOPY.EXE "%COPY_SOURCE%" "%COPY_DESTINATION%" %SWITCHES% /R:%RETRIES% /W:%WAIT% /LOG:%LOGFILE% /XF %EXCLUDE_FILETYPES%
) ELSE (
ROBOCOPY.EXE "%COPY_SOURCE%" "%COPY_DESTINATION%" %INCLUDE_FILETYPES% %SWITCHES% /R:%RETRIES% /W:%WAIT% /LOG:%LOGFILE% /XF %EXCLUDE_FILETYPES%
)
)
REM -------------------------------------------------------------------------------
:LOGFILE_CLEANUP
REM MOVE LOG FILE TO KEEP THE ROOT DIR CLEAN
SET LOGFILEDIR=%~dp0LogFiles
ECHO.
ECHO MOVING FILE: %LOGFILE%
ECHO TO: %LOGFILEDIR%
IF NOT EXIST "%LOGFILEDIR%\*.*" MKDIR "%LOGFILEDIR%"
MOVE "%LOGFILE%" "%LOGFILEDIR%\%LOGFILE%"
REM -------------------------------------------------------------------------------
REM END SCRIPT AND CLEAN UP
IF NOT %SILENT_MODE% == TRUE (
@PAUSE
)
GOTO :CLEANUP
REM -------------------------------------------------------------------------------
:SET_WINDOW_PARMS
REM SET_WINDOW_PARMS (winWidth winHeight bufWidth bufHeight)
mode con: cols=%1 lines=%2
powershell -command "&{$H=get-host;$W=$H.ui.rawui;$B=$W.buffersize;$B.width=%3;$B.height=%4;$W.buffersize=$B;}"
:ERRORS
:SOURCE_ERROR
CLS
ECHO THE SOURCE LOCATION
ECHO %COPY_SOURCE%
ECHO DOES NOT EXIST.
ECHO CHECK THE SOURCE FOLDER TO MAKE SURE IT IS CORRECT
ECHO AND RUN THIS SCRIPT AGAIN.
IF NOT %SILENT_MODE% == TRUE (
@PAUSE
)
GOTO :EOF
:DESTINATION_ERROR
CLS
ECHO THE DESTINATION LOCATION
ECHO %COPY_DESTINATION%
ECHO DOES NOT EXIST.
ECHO CHECK THE DESTINATION FOLDER TO MAKE SURE IT IS CORRECT
ECHO AND RUN THIS SCRIPT AGAIN.
IF NOT %SILENT_MODE% == TRUE (
@PAUSE
)
GOTO :EOF
:LOOP_ERROR
CLS
ECHO THE SOURCE AND DESTINATION LOCATIONS ARE THE SAME
ECHO SOURCE: %COPY_SOURCE%
ECHO DESTINATION: %COPY_DESTINATION%
ECHO.
ECHO PLEASE CHECK THE SOURCE AND DESTINATION LOCATIONS AND TRY AGAIN
IF NOT %SILENT_MODE% == TRUE (
@PAUSE
)
GOTO :EOF
:ROBOCOPY_ERROR
CLS
ECHO ROBOCOPY.EXE DOES NOT EXIST IN THE SAME FOLDER AS THIS SCRIPT
ECHO.
ECHO OR IN THE %SYSTEMROOT%\SYSTEM32 FOLDER.
ECHO.
ECHO ROBOCOPY IS BUILT INTO WINDOWS 7 AND NEWER AS WELL AS
ECHO.
ECHO WINDOWS SERVER 2008R2 AND NEWER. LASTLY IT CAN BE AQUIRED AS A STANDALONE
ECHO.
ECHO PROGRAM FROM THE WINDOWS SERVER 2003 RESOURCE KIT TOOLS
ECHO.
ECHO WHICH CAN BE DOWNLOADED FROM MICROSOFT AT THE URL BELOW.
ECHO.
ECHO http://www.microsoft.com/en-us/download/details.aspx?id=17657
ECHO.
IF NOT %SILENT_MODE% == TRUE (
@PAUSE
)
GOTO :EOF
:ROBOCOPY_HELP
CLS
ECHO THE HELP FILE HAS BEEN CREATED AND CAN BE FOUND AT
ECHO %HELP_FILENAME%
ECHO THIS SCRIPT WILL NOW EXIT.
IF NOT %SILENT_MODE% == TRUE (
@PAUSE
)
GOTO :EOF
REM -------------------------------------------------------------------------------
:EOF
:CLEANUP
endlocal
EXIT