本帖最后由 悬崖之树 于 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 文件复制完成&pauseCOPY |
|