Board logo

标题: [原创]同步文件 [打印本页]

作者: SpikeKnox     时间: 2007-2-9 13:06    标题: [原创]同步文件

同步源文件到多个目标,但不能解决目录同步问题

目录同步见:请教如何检测二个文件夹中的文件如有不同或没有就复制
@Echo OFF
::
:: BatName: syncfile.bat
:: Version: 0.1
:: Function: 根据文件修改日期及大小同步文件
::
:: Usage: syncfile sourcefile targetfile [targetfile2 targetfile3 ...]
::
:: Code by SpikeKnox 2007.01.29 Knox1@163.com
::

rem Show help
If [%1]==[/?] (Type "%~f0" | findstr "^::" && Goto :EOF)
If [%1]==[] (Type "%~f0" | findstr "^::" && Goto :EOF)

If NOT EXIST %1 ( Echo Source File %1 NOT EXIST ) & Goto :EOF

:Cmp
If [%2]==[] Goto :EOF
Call :CmpByTimeAndSize %1 %2
If %ERRORLEVEL% EQU 0 (
        choice /m "%1 ==> %2"
        If %ERRORLEVEL% EQU 0 Copy /y %1 %2
)
Shift /2
Goto :Cmp

Goto :EOF
:CmpByTimeAndSize
If [%2]==[] Goto :EOF
rem %1 varName
Set source=%1
rem %2 value
Set target=%2

If NOT EXIST %target% ( Echo File %target% NOT EXIST & Set /a ERRORLEVEL=0 & Goto :EOF )

For /f "tokens=1,2,3" %%i IN ('dir /T:W %source% ^| findstr "^[0-9]"') DO Set "sourceTag=%%i %%j" && Set sourceSize=%%k
For /f "tokens=1,2,3" %%i IN ('dir /T:W %target% ^| findstr "^[0-9]"') DO Set "targetTag=%%i %%j" && Set targetSize=%%k

If "%sourceTag%"=="%targetTag%" ( Set /a ERRORLEVEL=1 ) Else ( Set /a ERRORLEVEL=0 )
If "%sourceSize%"=="%targetSize%" ( Set /a ERRORLEVEL=1 ) Else ( Set /a ERRORLEVEL=0 )

作者: zh159     时间: 2007-2-9 14:22
xcopy /d:m-d-y

复制在指定日期或指定日期以后更改的文件。如果没有提供日期,只复制那些源时间比目标时间新的文件。