本帖最后由 悬崖之树 于 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
复制代码
|