标题: [文件管理] 批处理同步备份内容 [打印本页]
作者: 523066680 时间: 2010-4-28 22:58 标题: 批处理同步备份内容
本帖最后由 523066680 于 2011-6-20 23:18 编辑
最近很喜欢用xcopy 更新曾今备份过的目录系
用它的/d 参数,可以不用花过多的时间重新复制全部文件,只要检测更新即可。
速度快很多。
后来用着用着感觉备份目录系文件越来越多,郁闷了,于是做了一个脚本,
先判断 删除备份目录多出的文件 , 然后再进行xcopy.
(不知道是否有自带的命令直接做到呀,请赐教)
注:请慎用,
源文件夹和目的地文件夹都是在开头的变量中定义好的。
当定义的源目录不存在或者为空, 或者写错的时候,很可能酿成删除一切数据的悲剧……
所以我让批处理再次显示一次两个目录的地址,确认后再操作。- @echo off
- rem code by 523066680@cn-dos.net
- setlocal enabledelayedexpansion
- set source=%~dp0
- set dest=L:\files\烧录
-
- rem 源路径可以是自身路径,考虑到输入和%~dp0都可能出现末尾有\的情况,
- rem 增加了判断及处理
-
- 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! (
- rem dir是一次性的,可能已删除了总目录,所以增加判断_是否存在
- if exist "%%a\" (
- Tree "%%a">>DelFold.txt
- rd /s /q "%%a"
- rem echo Remove directory : %%a>>DelFold.txt
- ) 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
- exit
复制代码
作者: GNU 时间: 2010-4-28 23:11
“目录系”是什么东西啊?
作者: 523066680 时间: 2010-4-28 23:13 标题: 回复 2楼 的帖子
就是整个目录呀 …… 不会是名词不对头吧,深深地郁闷了。
作者: pdanniel66 时间: 2010-4-29 06:58
建议使用robocopy,我用 xcopy有3年以上,自从遇见robocopy,我已经移情别恋了,尤其是要 copy 多层目录之档案。
作者: 523066680 时间: 2011-6-20 23:21
自己的老帖,改下标题,现在自己写成调用版了。
由参数决定。
Synchronism.bat %Source% %Destination%
在xcopy 之前,会先对比源目录,多出的文件将被删除
慎用!尤其是目录名写错的话就死翘翘了。我还是自己留着好了。
我的情况是有个移动硬盘,每隔两三天就同步一次备份。- @echo off
- setlocal enabledelayedexpansion
- if "%~1"=="" (echo arg1 empty &exit /b)
- if "%~2"=="" (echo arg2 empty &exit /b)
-
- rem 参数中的路径末尾不应有斜杠。
- set src=%~1
- set dest=%~2
- set exclude=%~3
- echo %src% to
- echo %dest%
- echo exclude : %exclude%
- if not exist "%src%" (echo %src% does not exist &pause>nul &exit)
- if not exist "%dest%" (echo %dest% does not exist &pause>nul &exit)
- if "%src:~-1%"=="\" (set src=%src:~0,-1%)
- if "%dest:~-1%"=="\" (set dest=%dest:~0,-1%)
- pause
-
- echo Clear files. some dest\files not exist in source
- rem 如果只提示找不到文件而没有显示文件名,是因为目标目录一个文件也没有
- rem 是dir的提示
- for /f "tokens=*" %%a in ('dir /a-d /s /b %dest%') do (
- set str=%%a
- set str=!str:%dest%\=!
- if not exist "%src%\!str!" (
- echo !str! not exist in %src%
- del "%dest%\!str!"
- )
- )
- echo clear folder
- for /f "tokens=*" %%a in ('dir /ad /s /b %dest%') do (
- set str=%%a
- set str=!str:%dest%\=!
- if not exist "%src%\!str!" (
- echo !str! not exist in %src%
- rd "%dest%\!str!"
- )
- )
- echo xcopy
- xcopy /i /f /s /d /y /h /EXCLUDE:%exclude% %src% %dest%
- rem /i 如果目标不存在又在复制一个以上的文件,则假定目标是个目录。
- rem /S 复制目录和子目录,除了空的
- rem /f 复制时显示完整的源和目标文件名。
- rem /c 即使有错误,也继续复制。
- rem /y 复制文件审核设置(隐含 /O 复制文件所有权和 ACL 信息)
- rem /h 也复制隐藏和系统文件。
- pause
复制代码
作者: ygqiang 时间: 2011-6-26 16:42
建议使用robocopy,我用 xcopy有3年以上,自从遇见robocopy,我已经移情别恋了,尤其是要 copy 多层目录之档案。
pdanniel66 发表于 2010-4-29 06:58
robocopy非常好用。
分享下。
作者: ygqiang 时间: 2011-6-26 16:47
本帖最后由 ygqiang 于 2011-6-26 16:53 编辑
robocopy适合使用移动硬盘或者本地硬盘(至少有2个以上硬盘),定期对本地固定的某个硬盘目录做备份。
1、将文件解压缩到需要备份的目标盘(移动硬盘或者本地硬盘)根目录下,修改好bat文件内容。
2、以后需要备份,运行bat就可以。
3、如果是本地2个不同的硬盘,可以用批处理实现间隔定时同步备份。(这个方法就不提供了)
作者: ygqiang 时间: 2011-6-26 16:48
“Robocopy.exe 是 微软在Windows server 2003 Resource Kit Tools 里面提供的程序来做备份的,现在Windows Vista系统中已经自带了这个命令行程序。”
这个工具是微软公司推出的,配合bat批处理,使用非常稳定。
xp win7系统下,都可以正常使用。
作者: ygqiang 时间: 2011-6-26 16:59
再来一个工具。
xp、win7系统都可以用,后台静默运行。
作者: ygqiang 时间: 2011-6-26 17:13
00-00robocopy "c:\xxxx" "d:\xxx\xx" /mir
/mir的作用,就是完全的同步备份
如果修改成这种类似的,配合批处理 开机启动,定时间隔备份 会更好!
作者: ygqiang 时间: 2011-6-26 17:14
现在硬盘太脆弱了
2个硬盘,其中拿出1个做定时备份资料,用这个小工具,就不错了
作者: ygqiang 时间: 2011-6-26 17:26
如果robocopy配合批处理,提前设置好了
以后需要备份,只要运行bat文件,马上给你后台同步/镜像备份。目标与源完全一致。
作者: 523066680 时间: 2011-6-26 18:08
我说…… 用了7个楼的帖子推荐robocopy,也太隆重了。
自己去找了一下官网的下载+安装包链接:
http://www.microsoft.com/downloa ... &displaylang=en
作者: Batcher 时间: 2011-6-26 19:38
6# ygqiang
尽量避免重复上传附件:
http://bbs.bathome.net/thread-6283-1-1.html
作者: applba 时间: 2011-6-26 19:56
2# GNU
目录系就是目录树
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |