标题: [文件管理] 差异备份文件夹的批处理 [打印本页]
作者: 悬崖之树 时间: 2018-7-28 13:12 标题: 差异备份文件夹的批处理
本帖最后由 悬崖之树 于 2018-7-29 13:34 编辑
- @echo off&setlocal enabledelayedexpansion
- echo 差异备份文件夹
- echo ---------------------------------------------------
- echo 本程序通过差异备份把源文件夹的内容备份到目标文件夹内,
- echo 删除目标文件夹内的无用文件和文件夹,保留有效的文件和
- echo 文件夹,再把要备份的文件和文件夹复制到目标文件夹内,
- echo 不替换目标文件夹内的有效文件和文件夹,最后达到两个文件
- echo 夹得内容完全一致。源文件夹是指要备份的文件夹,目标文件
- echo 夹是指存放源文件夹内容副本的文件夹,千万不要弄错了,
- echo 否则后果自负。不要备份含有特殊字符如^(^),^&等的文件夹。
- echo ---------------------------------------------------
- echo.&echo.&echo.
- set /p "src=请输入源文件夹地址:"
- set /p "des=请输入目标文件夹地址:"
- set s=%src:"=%
- set d=%des:"=%
- echo 开始删除目标文件夹内的无用文件。。。
- ::删除无用文件
- for /f "delims=" %%i in ('dir %des% /b /a-d /s') do (
- set flag=1
- ::flag为0表示不删除,1表示要删除
- set i=%%i
- ::%%i和i表示目标文件夹文件的绝对路径
- set j=!i:%d%=%s%!
- ::j表示对应的源文件夹文件的绝对路径
- if exist "!j!" (
- call:md5 "!i!" m
- call:md5 "!j!" n
- if !m!==!n! set flag=0
- )
-
- if !flag!==1 (
- echo 删除 "!i!" & del /f "!i!")
- )
- echo 无用文件删除完成&pause
- echo 开始删除无用文件夹。。。
- ::删除无用文件夹
- for /f "delims=" %%i in ('dir %des% /b /ad /s^|sort /r /+300') do (
-
- set i=%%i
- ::%%i和i表示目标文件夹文件的绝对路径
- set j=!i:%d%=%s%!
- ::j表示对应的源文件夹文件的绝对路径
- if not exist "!j!" (
- echo 删除 "!i!" & rd "!i!"
- )
- )
- echo 无用文件夹删除完成&pause
- echo 开始在目标文件夹内创建目录结构。。。
- ::在目标文件夹中创建源文件夹目录结构
- for /d /r %src% %%j in (*) do (
- set j=%%j
- ::j表示源文件夹的路径
- set i=!j:%s%=%d%!
- ::i表示对应的目标文件夹的路径
- echo 创建 "!i!" & md "!i!"
- )
- echo 目录结构创建完成&pause
- echo 开始复制源文件夹文件至目标文件夹。。。
- ::复制源文件夹文件至目标文件夹
- for /f "delims=" %%j in ('dir %src% /a-d /b /s') do (
- set "j=%%j"
- ::j表示源文件夹的路径
- set "i=!j:%s%=%d%!"
- ::i表示对应的目标文件夹的路径
- if not exist "!i!" (
- echo 复制 "!j!" & copy "!j!" "!i!"
- )
- )
- echo 文件复制完成&pause&exit
- :md5
- for /f "skip=1 delims=" %%k in ('certutil -hashfile %1') do (
- set %2=%%k
- goto:eof
- )
复制代码
作者: 悬崖之树 时间: 2018-7-30 13:33
上面的速度太慢,这个比较快一点。- @echo off&setlocal enabledelayedexpansion
- echo 差异备份文件夹
- echo ---------------------------------------------------
- echo 本程序通过差异备份把源文件夹的内容备份到目标文件夹内,
- echo 删除目标文件夹内的无用文件和文件夹,保留有效的文件和
- echo 文件夹,再把要备份的文件和文件夹复制到目标文件夹内,
- echo 不替换目标文件夹内的有效文件和文件夹,最后达到两个文件
- echo 夹得内容完全一致。源文件夹是指要备份的文件夹,目标文件
- echo 夹是指存放源文件夹内容副本的文件夹,千万不要弄错了,
- echo 否则后果自负。不要备份含有特殊字符如^(^),^&等的文件夹。
- echo ---------------------------------------------------
- echo.&echo.&echo.
- set /p "src=请输入源文件夹地址:"
- set /p "des=请输入目标文件夹地址:"
- set s=%src:"=%
- set d=%des:"=%
- echo 开始删除目标文件夹内的无用文件。。。
- ::删除无用文件
- for /f "delims=" %%i in ('dir %des% /b /a-d /s') do (
- set flag=1
- ::flag为0表示不删除,为1表示删除
- set i=%%i
- ::%%i和i表示目标文件夹文件的绝对路径
- set j=!i:%d%=%s%!
- ::j和%%j表示对应的源文件夹文件的绝对路径
- for /f "delims=" %%j in ("!j!") do (
- if exist "%%j" (
- if "%%~zj" == "%%~zi" (
- set flag=0
- )
- )
- )
-
- if !flag!==1 (
- echo 删除 "!i!" && del /f "!i!"
- )
- )
- echo 无用文件删除完成&pause
- echo 开始删除无用文件夹。。。
- ::删除无用文件夹
- for /f "delims=" %%i in ('dir %des% /b /ad /s^|sort /r /+300') do (
-
- set i=%%i
- ::%%i和i表示目标文件夹文件的绝对路径
- set j=!i:%d%=%s%!
- ::j表示对应的源文件夹文件的绝对路径
- if not exist "!j!" (
- echo 删除 "!i!" & rd "!i!"
- )
- )
- echo 无用文件夹删除完成&pause
- echo 开始在目标文件夹内创建目录结构。。。
- ::在目标文件夹中创建源文件夹目录结构
- for /d /r %src% %%j in (*) do (
- set j=%%j
- ::j表示源文件夹的路径
- set i=!j:%s%=%d%!
- ::i表示对应的目标文件夹的路径
- md "!i!" 2>nul && echo 创建 "!i!"
- )
- echo 目录结构创建完成&pause
- echo 开始复制源文件夹文件至目标文件夹。。。
- ::复制源文件夹文件至目标文件夹
- for /f "delims=" %%j in ('dir %src% /a-d /b /s') do (
- set "j=%%j"
- ::j表示源文件夹的路径
- set "i=!j:%s%=%d%!"
- ::i表示对应的目标文件夹的路径
- if not exist "!i!" (
- echo 复制 "!j!" & copy "!j!" "!i!"
- )
- )
- echo 文件复制完成&pause
复制代码
作者: 悬崖之树 时间: 2018-7-30 19:31
本帖最后由 悬崖之树 于 2018-8-1 19:58 编辑
这个支持备份含有特殊字符的文件夹- @echo off&setlocal enabledelayedexpansion
- echo 差异备份文件夹
- echo ---------------------------------------------------
- echo 本程序通过差异备份把源文件夹的内容备份到目标文件夹内,
- echo 删除目标文件夹内的无用文件和文件夹,保留有效的文件和
- echo 文件夹,再把要备份的文件和文件夹复制到目标文件夹内,
- echo 不替换目标文件夹内的有效文件和文件夹,最后达到两个文件
- echo 夹得内容完全一致。源文件夹是指要备份的文件夹,目标文件
- echo 夹是指存放源文件夹内容副本的文件夹,千万不要弄错了,
- echo 否则后果自负。支持备份含有特殊字符如^(^),^&等的文件夹。
- echo ---------------------------------------------------
- echo.&echo.&echo.
- set /p "src=请输入源文件夹地址:"
- set /p "des=请输入目标文件夹地址:"
- set t=^"
- set s=!src:%t%=!
- set d=!des:%t%=!
- echo 开始删除目标文件夹内的无用文件。。。
- ::删除无用文件
- for /f "delims=" %%i in ('dir "%d%" /b /a-d /s') do (
- set flag=1
- ::flag为0表示不删除,为1表示删除
- set "i=%%i"
- ::%%i和i表示目标文件夹文件的绝对路径
- set "j=!i:%d%=%s%!"
- ::j和%%j表示对应的源文件夹文件的绝对路径
- for /f "delims=" %%j in ("!j!") do (
- if exist "%%j" (
- if "%%~zj" == "%%~zi" (
- set flag=0
- )
- )
- )
-
- if !flag!==1 (
- echo 删除 "!i!" && del /f "!i!"
- )
- )
- echo 无用文件删除完成&pause
- echo 开始删除无用文件夹。。。
- ::删除无用文件夹
- for /f "delims=" %%i in ('dir "%d%" /b /ad /s^|sort /r /+300') do (
-
- set "i=%%i"
- ::%%i和i表示目标文件夹文件的绝对路径
- set "j=!i:%d%=%s%!"
- ::j表示对应的源文件夹文件的绝对路径
- if not exist "!j!" (
- echo 删除 "!i!" & rd "!i!"
- )
- )
- echo 无用文件夹删除完成&pause
- echo 开始在目标文件夹内创建目录结构。。。
- ::在目标文件夹中创建源文件夹目录结构
- for /d /r "%s%" %%j in (*) do (
- set "j=%%j"
- ::j表示源文件夹的路径
- set "i=!j:%s%=%d%!"
- ::i表示对应的目标文件夹的路径
- md "!i!" 2>nul && echo 创建 "!i!"
- )
- echo 目录结构创建完成&pause
- echo 开始复制源文件夹文件至目标文件夹。。。
- ::复制源文件夹文件至目标文件夹
- for /f "delims=" %%j in ('dir "%s%" /a-d /b /s') do (
- set "j=%%j"
- ::j表示源文件夹的路径
- set "i=!j:%s%=%d%!"
- ::i表示对应的目标文件夹的路径
- if not exist "!i!" (
- echo 复制 "!j!" & copy "!j!" "!i!"
- )
- )
- echo 文件复制完成&pause
复制代码
作者: 悬崖之树 时间: 2018-8-1 12:37 标题: 差异备份文件夹
本帖最后由 悬崖之树 于 2018-8-1 19:52 编辑
这个支持特殊字符和驱动器- @echo off&setlocal enabledelayedexpansion
- echo 差异备份文件夹
- echo ---------------------------------------------------
- echo 本程序通过差异备份把源文件夹的内容备份到目标文件夹内,
- echo 删除目标文件夹内的无用文件和文件夹,保留有效的文件和
- echo 文件夹,再把要备份的文件和文件夹复制到目标文件夹内,
- echo 不替换目标文件夹内的有效文件和文件夹,最后达到两个文件
- echo 夹得内容完全一致。源文件夹是指要备份的文件夹,目标文件
- echo 夹是指存放源文件夹内容副本的文件夹,千万不要弄错了,
- echo 否则后果自负。支持备份含有特殊字符如^(^),^&等的文件夹,
- echo 但是不支持备份的文件路径或名字有“!”的文件哦!
- echo ---------------------------------------------------
- echo.&echo.&echo.
- set /p "src=请输入源文件夹地址:"
- set /p "des=请输入目标文件夹地址:"
- set t=^"
- set s=!src:%t%=!
- set d=!des:%t%=!
- if "%s:~-1,1%" == "\" set "s=%s:~0,-1%"
- if "%d:~-1,1%" == "\" set "d=%d:~0,-1%"
- echo 开始删除目标文件夹内的无用文件。。。
- ::删除无用文件
- for /f "delims=" %%i in ('dir "%d%" /b /a-d /s') do (
- set flag=1
- ::flag为0表示不删除,为1表示删除
- set i=%%i
- ::%%i和i表示目标文件夹文件的绝对路径
- set "j=!i:%d%=%s%!"
- ::j和%%j表示对应的源文件夹文件的绝对路径
- for /f "delims=" %%j in ("!j!") do (
- if exist "%%j" (
- if "%%~zj" == "%%~zi" (
- set flag=0
- )
- )
- )
-
- if !flag!==1 (
- echo 删除 "!i!" && del /f "!i!"
- )
- )
- echo 无用文件删除完成&pause
- echo 开始删除无用文件夹。。。
- ::删除无用文件夹
- for /f "delims=" %%i in ('dir "%d%" /b /ad /s^|sort /r /+300') do (
-
- set "i=%%i"
- ::%%i和i表示目标文件夹的...
- set "j=!i:%d%=%s%!"
- ::j表示对应的源文件夹的...
- if not exist "!j!" (
- echo 删除 "!i!" & rd "!i!"
- )
- )
- echo 无用文件夹删除完成&pause
- echo 开始在目标文件夹内创建目录结构。。。
- ::在目标文件夹中创建源文件夹内目录结构
- for /d /r "%s%" %%j in (*) do (
- set "j=%%j"
- ::j表示源文件夹的...
- set "i=!j:%s%=%d%!"
- ::i表示对应的目标文件夹的...
- md "!i!" 2>nul && echo 创建 "!i!"
- )
- echo 目录结构创建完成&pause
- echo 开始复制源文件夹文件至目标文件夹。。。
- ::复制源文件夹文件至目标文件夹
- for /f "delims=" %%j in ('dir "%s%" /a-d /b /s') do (
- set "j=%%j"
- ::j表示源文件夹的...
- set "i=!j:%s%=%d%!"
- ::i表示对应的目标文件夹的...
- if not exist "!i!" (
- echo 复制 "!j!" & copy "!j!" "!i!"
- )
- )
- echo 文件复制完成&pause
复制代码
作者: 1410029385 时间: 2018-8-4 15:28
支持LZ
作者: zhqiao 时间: 2018-9-23 12:07
简练的代码就是美
作者: 网络民工 时间: 2019-4-11 09:55
支持!支持!复杂化简
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |