吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1008|回复: 19
上一主题 下一主题
收起左侧

[其他原创] 分享一个刚出炉的文件夹增量备份功能的批处理希望大家能用上。

  [复制链接]
跳转到指定楼层
楼主
omar111 发表于 2026-8-15 08:33 回帖奖励
使用场景,有两个目录backup和backup1 ,先把backup和backup1目录进行同步,
同步之后生成日志记录增量文件。根据日志把增量的部分单独复制到目录backup2
复制代码保存utf-8 批处理格式文件即可运行。生成日志的目录是批处理文件所在目录

@echo off
setlocal enabledelayedexpansion
chcp 65001 >nul

::====================配置区====================
set "SOURCE=d:\backup"
set "BASE=d:\backup1"
set "INCREMENT=d:\backup2"
set "LOG=%~dp0增量日志_%date:/=-%_%time::=-%.log"
::================================================

echo ==============================================
echo 源目录:%SOURCE%
echo 基准目录:%BASE%
echo 增量文件存放:%INCREMENT%(仅存放变动文件)
echo ==============================================
echo.

if not exist "%SOURCE%" (
    echo [错误] 源目录不存在 %SOURCE%
    echo [错误] 源目录不存在 %SOURCE% >>"%LOG%"
    pause
    exit /b 1
)

::清空上次增量文件夹
if exist "%INCREMENT%" rmdir /s /q "%INCREMENT%" 2>nul
md "%INCREMENT%"

set "totalFile=0"
set "changeFile=0"

echo 【1】开始比对文件,仅复制变动文件至 %INCREMENT%
for /f "delims=" %%f in ('dir /s /b /a-d "%SOURCE%" 2^>nul') do (
    set /a totalFile+=1
    set "SrcFile=%%f"
    set "RelPath=!SrcFile:%SOURCE%=!"
    if "!RelPath:~0,1!"=="\" set "RelPath=!RelPath:~1!"

    set "BaseFile=%BASE%\!RelPath!"
    set "IncFile=%INCREMENT%\!RelPath!"
    set "NeedCopy=0"

    ::判定规则
    if not exist "!BaseFile!" (
        set NeedCopy=1
    ) else (
        for %%b in ("!BaseFile!") do (
            if not "%%~zf"=="%%~zb" (
                set NeedCopy=1
            ) else (
                if not "%%~tf"=="%%~tb" (
                    set NeedCopy=1
                )
            )
        )
    )

    ::只有变动才复制到backup2
    if !NeedCopy! equ 1 (
        set "IncDir=%%~dpf"
        set "IncDir=!IncDir:%SOURCE%=%INCREMENT%!"
        if not exist "!IncDir!" md "!IncDir!" 2>nul
        copy /y "!SrcFile!" "!IncFile!" >nul
        if !errorlevel! equ 0 (
            set /a changeFile+=1
            echo [变更] !RelPath!
            echo [变更] !RelPath! >>"%LOG%"
        ) else (
            echo [失败] !RelPath!
            echo [失败] !RelPath! >>"%LOG%"
        )
    )
)

echo.
echo 【2】更新基准目录 backup1,为下次比对做准备
robocopy "%SOURCE%" "%BASE%" /E /MIR /XO /XN /XC /R:3 /W:5 /NP /NDL >>"%LOG%"

echo.
echo ==============================================
echo 总共扫描文件:%totalFile%
echo 本次变动文件:%changeFile%
echo 变动文件仅保存在:%INCREMENT%
echo 日志文件:%LOG%
echo ==============================================
pause

免费评分

参与人数 3吾爱币 +3 热心值 +3 收起 理由
苏紫方璇 + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
yq401 + 1 + 1 谢谢@Thanks!
be55555 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
wufashihu 发表于 2026-8-15 15:04
加在到代码框里,方便看


[HTML] 纯文本查看 复制代码
@echo off
setlocal enabledelayedexpansion
chcp 65001 >nul

::====================配置区====================
set "SOURCE=d:\backup"
set "BASE=d:\backup1"
set "INCREMENT=d:\backup2"
set "LOG=%~dp0增量日志_%date:/=-%_%time::=-%.log"
::================================================

echo ==============================================
echo 源目录:%SOURCE%
echo 基准目录:%BASE%
echo 增量文件存放:%INCREMENT%(仅存放变动文件)
echo ==============================================
echo.

if not exist "%SOURCE%" (
    echo [错误] 源目录不存在 %SOURCE%
    echo [错误] 源目录不存在 %SOURCE% >>"%LOG%"
    pause
    exit /b 1
)

::清空上次增量文件夹
if exist "%INCREMENT%" rmdir /s /q "%INCREMENT%" 2>nul
md "%INCREMENT%"

set "totalFile=0"
set "changeFile=0"

echo 【1】开始比对文件,仅复制变动文件至 %INCREMENT%
for /f "delims=" %%f in ('dir /s /b /a-d "%SOURCE%" 2^>nul') do (
    set /a totalFile+=1
    set "SrcFile=%%f"
    set "RelPath=!SrcFile:%SOURCE%=!"
    if "!RelPath:~0,1!"=="\" set "RelPath=!RelPath:~1!"

    set "BaseFile=%BASE%\!RelPath!"
    set "IncFile=%INCREMENT%\!RelPath!"
    set "NeedCopy=0"

    ::判定规则
    if not exist "!BaseFile!" (
        set NeedCopy=1
    ) else (
        for %%b in ("!BaseFile!") do (
            if not "%%~zf"=="%%~zb" (
                set NeedCopy=1
            ) else (
                if not "%%~tf"=="%%~tb" (
                    set NeedCopy=1
                )
            )
        )
    )

    ::只有变动才复制到backup2
    if !NeedCopy! equ 1 (
        set "IncDir=%%~dpf"
        set "IncDir=!IncDir:%SOURCE%=%INCREMENT%!"
        if not exist "!IncDir!" md "!IncDir!" 2>nul
        copy /y "!SrcFile!" "!IncFile!" >nul
        if !errorlevel! equ 0 (
            set /a changeFile+=1
            echo [变更] !RelPath!
            echo [变更] !RelPath! >>"%LOG%"
        ) else (
            echo [失败] !RelPath!
            echo [失败] !RelPath! >>"%LOG%"
        )
    )
)

echo.
echo 【2】更新基准目录 backup1,为下次比对做准备
robocopy "%SOURCE%" "%BASE%" /E /MIR /XO /XN /XC /R:3 /W:5 /NP /NDL >>"%LOG%"

echo.
echo ==============================================
echo 总共扫描文件:%totalFile%
echo 本次变动文件:%changeFile%
echo 变动文件仅保存在:%INCREMENT%
echo 日志文件:%LOG%
echo ==============================================
pause
推荐
shirker 发表于 2026-8-15 23:07
好像有点明白了,跟通常用的备份不同,这个是把有变动的文件,到backup2文件夹,用于监控查看对吧。
沙发
jzq7121 发表于 2026-8-15 08:39
3#
cioceo 发表于 2026-8-15 09:01
不是有同步软件吗?同步前还能手动对比差异
4#
diysoul 发表于 2026-8-15 09:23
同步的bat小程序
5#
开创者 发表于 2026-8-15 10:02
感觉不错,试试看
6#
jzx765 发表于 2026-8-15 10:13
可以啊,看看到底哪里变了
7#
gmd0819 发表于 2026-8-15 10:24
感觉可以试下
8#
wstcdw123 发表于 2026-8-15 10:58
简直就是打工牛马的福音
9#
天天哈皮 发表于 2026-8-15 11:29
可以增加定时备份功能
10#
 楼主| omar111 发表于 2026-8-15 11:56 |楼主
天天哈皮 发表于 2026-8-15 11:29
可以增加定时备份功能

做个计划任务就可以了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-8-18 03:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表