本帖最后由 523066680 于 2011-6-20 23:18 编辑
最近很喜欢用xcopy 更新曾今备份过的目录系
用它的/d 参数,可以不用花过多的时间重新复制全部文件,只要检测更新即可。
速度快很多。
后来用着用着感觉备份目录系文件越来越多,郁闷了,于是做了一个脚本,
先判断 删除备份目录多出的文件 , 然后再进行xcopy.
(不知道是否有自带的命令直接做到呀,请赐教)
注:请慎用,
源文件夹和目的地文件夹都是在开头的变量中定义好的。
当定义的源目录不存在或者为空, 或者写错的时候,很可能酿成删除一切数据的悲剧……
所以我让批处理再次显示一次两个目录的地址,确认后再操作。 | @echo off | | | | setlocal enabledelayedexpansion | | set source=%~dp0 | | set dest=L:\files\烧录 | | | | rem 源路径可以是自身路径,考虑到输入和%~dp0都可能出现末尾有\的情况, | | | | | | if "%source:~-1%"=="\" (set source=%source:~0,-1%) | | if "%dest:~-1%"=="\" (set dest=%dest:~0,-1%) | | | | if not exist "%source%\" ( | | echo 源[目录]不存在,按任意键退出 | | pause>nul | | exit | | ) | | | | echo 请确认: 源目录 %source% | | echo 备份到 %dest% | | if not exist "%dest%\" ( | | echo 作为备份的目录%dest% 不存在,将尝试建立。 | | (md "%dest%")||( | | echo 目标不能建立,可能是目标磁盘不存在,按任意键退出。 | | pause>nul | | exit | | ) | | goto :justcopy | | ) | | | | type nul>DelFile.txt | | type nul>DelFold.txt | | | | echo _ | | echo 按任意键开始搜索+清理 "%dest%"中可能多出的文件或子文件夹 | | pause>nul | | echo _ | | | | for /f "tokens=*" %%a in ('dir /a /s /b "%dest%"') do ( | | set pathname=%%a | | set pathname=!pathname:%dest%\=! | | if exist "%%a" ( | | if not exist %source%\!pathname! ( | | | | if exist "%%a\" ( | | Tree "%%a">>DelFold.txt | | rd /s /q "%%a" | | | | ) else ( | | del /f /s /a /q "%%a">>DelFile.txt | | ) | | ) | | ) | | ) | | echo 本次清理生成日志 DelFold.txt DelFile.txt | | type "DelFold.txt" "Delfile.txt" | | | | :justcopy | | echo _ | | echo 按任意键继续开始XCOPY... | | pause>nul | | echo _ | | if exist cut.txt ( | | xcopy /s /d /c /h /exclude:cut.txt "%source%" "%dest%" | | ) else ( | | xcopy /s /d /c /h "%source%" "%dest%" | | ) | | echo 按任意键退出 | | pause>nul | | exitCOPY |
|