AHTuKuJIJIeP, сделано неплохо, вот только копия файла уже существует и скрипт не отработает а если убрать проверку существования копии (которая сама не исчезнет), то при повторном запуске твой скрипт заново будет копировать файл.
предлагаю вести лог и по нему и отслеживать была ли сделана копия:
Код:

@Echo off
SetLocal EnableExtensions
Set File=C:\1\MyFile.dat
Set BackUp=C:\2\
set Msg=Nothing to do
set tm=%time::=-%
set tm=%date:~6,4%-%date:~3,2%-%date:~0,2%_%tm:~0,-3%
set Chk=%tm:~8,2%
if /I %Chk% LSS 20 Goto End
set Chk=%tm:~0,7%
for /f "Tokens=1,2* Delims=:" %%D in ('FindStr /i /c:"Synchronization Done" %~dpn0.log') do set Last=%%D
set Last=%Last:~0,7%
if "%Chk%"=="%Last%" Goto End
copy /y %File% %BackUp%
if %ErrorLevel%==0 (set Msg=Synchronization Done
) else set Msg=Synchronization Failed !!!
:End
echo %tm%: %Msg%>>%~dpn0.log
* 2 замечания (фичи

):
1. если копия файла окажется защищена или занята, то копирования не произойдет - смотрите лог
2. малость упростил проверку - копирование возможно не с 20 по 30, а просто с 20 (т.е. и 31го тоже)
Если второе замечание критично - легко поправлю проверку.