10-robocopy
@echo off set "srcDir=D:\System\桌面\BatDir\zsrc" set "dstDir=D:\System\桌面\BatDir\zdst" REM robocopy 返回值为 1,不一定代表 "没有发生任何拷贝",而是"所有文件都已同步,最终一致" REM robocopy "%srcDir%" "%dstDir%" /e /njh /njs /np /ns /nc /r:1 /w:1 REM /MIR 等价 /E /PURGE 让目标目录和源目录完全一致,自动删除目标目录多余的文件和文件夹 robocopy "%srcDir%" "%dstDir%" /E /R:1 /W:1 /MT:16 /NP /XF *.tmp *.bak /XD dload logs /LOG:robocopy_log.txt /TEE if %errorlevel% leq 1 ( echo 所有内容都已同步,最终一致 ) else ( echo 有同步操作,或者有错误,请检查日志。 ) setlocal enabledelayedexpansion set "needCopy=0" for /f "delims=" %%i in ('dir /b /s /a "%srcDir%%"') do ( set "fullSrcPath=%%i" set "relPath=!fullSrcPath:%srcDir%\=!" if not exist "%dstDir%\!relPath!" ( set "needCopy=1" goto :copyFiles ) ) endlocal echo script run finish! pause :copyFiles if "%needCopy%"=="1" ( echo 目标目录缺少文件或目录,开始拷贝... xcopy "%srcDir%\*" "%dstDir%\" /E /H /K /Y ) else ( echo 目标目录已包含所有文件和目录,无需复制 ) goto :eof