for /f "delims=" %%i in ('dir /b /s /a-d %SF%\*.*') do (
if not exist "%DF%\%%~nxi" (xcopy /e "%%i" "%DF%\" & echo done1
) else (
if "%SF%\%%~zi" NEQ "%DF%\%%~zi" (xcopy /e /y "%%i" "%DF%\" & echo done2
) else (
echo skip
)
)
)
pause
下面是用FC的,如果两个文件不同ERRORLEVEL应该为1,但是ERRORLEVEL一直为0,很奇怪...如果把FC那一段单独拿出来运行是正常的...
@echo off
set SF=d:\1
set DF=d:\2
for /f "delims=" %%i in ('dir /b /s /a-d %SF%\*.*') do (
if not exist "%DF%\%%~nxi" (xcopy /e "%%i" "%DF%\" & echo done1
) else (
FC "%SF%\%%~nxi" "%DF%\%%~nxi"
echo %errorlevel%
if %errorlevel%==1 (xcopy /e /y "%%i" "%DF%\" & echo done2
) else (
echo skip
)
)
)
pause
[ Last edited by gene771771 on 2009-10-25 at 21:47 ]作者: qinchun36 时间: 2009-10-25 20:44 如果你之前使用WINDOWS的公文包的话,只需要“全部更新”就好了,现在这种情况我也不知道。。。作者: gene771771 时间: 2009-10-25 22:03 试了试这个代码好像可以,大家再帮我看看~
@echo off
set SF=d:\1
set DF=d:\2
for /f "delims=" %%i in ('dir /b /s /a-d %SF%\*.*') do (
if not exist "%DF%\%%~nxi" (xcopy /e "%%i" "%DF%\" & echo done1
) else (
FC "%SF%\%%~nxi" "%DF%\%%~nxi" >nul || xcopy /e /y "%%i" "%DF%\" && echo done2
)
)
pause
希望增加自动删除2中多余的文件的功能
[ Last edited by gene771771 on 2009-10-25 at 22:22 ]作者: yishanju 时间: 2009-10-26 00:07 直接XCOPY /D即可。作者: gene771771 时间: 2009-10-28 16:22 XCOPY /D 不能满足要求,因为有的文件虽然日期是不一样,但是内容是完全一样的,/D无法跳过这些文件作者: gene771771 时间: 2009-10-28 17:39 唉,为什么没人帮忙呢。。。
还是自食其力,找了个第三方工具robocopy,试过了,非常好用,大家可以研究
一条命令搞定一切...
set SF=d:\1
set DF=d:\2
robocopy /e /eta /it "%SF%" "%DF%"