@echo off REM ----------------------------------------------------------------------- REM SXCOPY.CMD REM REM Purpose: Execute a safe and informative xcopy. REM - verify the existence of the source REM - write the operation performed in a logfile REM - write the execution times in a logfile REM - if xcopy fails, loop MAX times until success REM REM Parameters: REM - switches of xcopy REM - source of xcopy REM - destination of xcopy REM ----------------------------------------------------------------------- if NOT "%_echo%" == "" echo on if NOT "%verbose%" == "" echo on setlocal ENABLEEXTENSIONS if "%3"=="" goto Usage REM Caller can specify target to be a filename explicitly to avoid being REM prompted with the target is a file or destination set filetarget= if /i "%4"=="file" set filetarget=1 REM Verify source if exist %2 goto Start_Loop echo ERROR: xcopy source %2 does not exist. goto End :Start_Loop REM Try xcopy MAX times (10 minutes) or until success. set /A MAX=100 set /A count=1 :Loop REM ------------------------------------------------ REM Attempts to execute xcopy: REM ------------------------------------------------ if "%count%" == "%MAX%" goto XCopy_Fail if defined filetarget ( echo f | xcopy %1 %2 %3 ) else ( xcopy %1 %2 %3 ) if errorlevel 1 ( if defined filetarget ( echo ERROR: echo f ^| xcopy %1 %2 %3 failed. Try again... ) else ( echo ERROR: xcopy %1 %2 %3 failed. Try again... ) set /A count=%count%+1 sleep 6 goto Loop ) :End_Loop set mes= if not "%count%"=="1" set mes=succedded after %count% attempts if defined filetarget ( echotime DONE /bH:MbObD --- echo f ^| xcopy /%1 %2 %3 %mes% ) else ( echotime DONE /bH:MbObD --- xcopy /%1 %2 %3 %mes% ) goto End :XCopy_Fail if defined filetarget ( echo ERROR: echo f ^| xcopy %1 %2 %3 failed after %MAX% attempts. echo echo f ^| xcopy %1 %2 %3 failed after %MAX% attempts. ) else ( echo ERROR: xcopy %1 %2 %3 failed after %MAX% attempts. echo xcopy %1 %2 %3 failed after %MAX% attempts. ) goto End REM Display Usage: :Usage echo. echo Safe xcopy wrapper that logs and retries on error echo. echo Usage: %0 ^ ^ ^ [file] echo ex: %0 /rf foo %%tmp%%\ echo ex: %0 /v foo %%tmp%%\foo.orig file echo. echo file Key word to denote that ^ is a filename echo as opposed to a directory name. echo Prepends "echo f |" to the xcopy command echo. goto End :End endlocal