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

 

posted @ 2025-09-07 18:16  乐观的知觉  阅读(8)  评论(0)    收藏  举报