中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS学习入门 & 精彩文章 (教学室) » [原创]特强的自动备份批处理源代码
作者:
标题: [原创]特强的自动备份批处理源代码 上一主题 | 下一主题
biolover
中级用户




积分 300
发帖 80
注册 2003-6-29
状态 离线
『楼 主』:  [原创]特强的自动备份批处理源代码

最近编辑了一系列批处理文件,用于将Windows 2000 Server的\\PC1备份到本地Windows 2K3的D:\Backup,运行效果比原来用Winrar的命令要好多了,这个备份批处理文件包括Backup.bat的备份调度文件和一系列Bck1.bat,Bck2.bat,...Bck7.bat的针对不同目录的备份执行文件,还有Del1.bat,Del2.bat,...Del7.bat的备份删除文件,备份调度的启动用Windows 2K3的计划功能进行,备份调度自动检查当前时间,每晚23点到早上8点进行备份过程,其它时间备份程序会自动退出,每三个月的1号会自动对备份中的已删除的源文件进行删除。每晚的备份工作完成后,如果时间还在7点以前,就将本地电脑休眠,将PC1源电脑关闭。上述产生的备份还包含了各个目录或文件的NTFS所有权和访问权限。
以下是执行上述功能的批处理文件源代码。注意,这些批处理文件利用了Win2K以上对DOS命令的增强功能,在Win9X系统中不能完全正确地执行,在Windows 2K或XP中不能休眠本地电脑(因为Win2K或XP中不支持shutdown /h,不过可将Win2K3的shutdown.exe拷贝到Win2K或XP中运行)。
backup.bat源代码:
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GEQ 23 goto Back1
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GTR 07 goto exit
:Back1
call D:\BACKUP\Setting\Bat\Bck1.bat
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GEQ 23 goto Back2
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GTR 07 goto exit
:Back2
call D:\BACKUP\Setting\Bat\Bck2.bat
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GEQ 23 goto Back3
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GTR 07 goto exit
:Back3
call D:\BACKUP\Setting\Bat\Bck3.bat
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GEQ 23 goto Back4
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GTR 07 goto exit
:Back4
call D:\BACKUP\Setting\Bat\Bck4.bat
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GEQ 23 goto Back5
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GTR 07 goto exit
:Back5
call D:\BACKUP\Setting\Bat\Bck5.bat
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GEQ 23 goto Back6
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GTR 07 goto exit
:Back6
call D:\BACKUP\Setting\Bat\Bck6.bat
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GEQ 23 goto Back7
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GTR 07 goto exit
:Back7
call D:\BACKUP\Setting\Bat\Bck7.bat
:month
@for /f "tokens=2 delims=- " %%a in ('date /t') do if %%a==01 goto date
@for /f "tokens=2 delims=- " %%a in ('date /t') do if %%a==04 goto date
@for /f "tokens=2 delims=- " %%a in ('date /t') do if %%a==07 goto date
@for /f "tokens=2 delims=- " %%a in ('date /t') do if %%a==10 goto date
goto shutdown
:date
@for /f "tokens=3 delims=- " %%a in ('date /t') do if %%a==01 goto del
goto shutdown
:del
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GEQ 23 goto Del1
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GTR 07 goto exit
el1
call D:\BACKUP\Setting\Bat\Del1.bat
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GEQ 23 goto Del2
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GTR 07 goto exit
el2
call D:\BACKUP\Setting\Bat\Del2.bat
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GEQ 23 goto Del3
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GTR 07 goto exit
el3
call D:\BACKUP\Setting\Bat\Del3.bat
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GEQ 23 goto Del4
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GTR 07 goto exit
el4
call D:\BACKUP\Setting\Bat\Del4.bat
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GEQ 23 goto Del5
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GTR 07 goto exit
el5
call D:\BACKUP\Setting\Bat\Del5.bat
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GEQ 23 goto Del6
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GTR 07 goto exit
el6
call D:\BACKUP\Setting\Bat\Del6.bat
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GEQ 23 goto Del7
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GTR 07 goto exit
el7
call D:\BACKUP\Setting\Bat\Del7.bat
:shutdown
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A GEQ 23 goto Sleep
@FOR /F "tokens=1 delims=:" %%A IN ('TIME /T') DO IF %%A LSS 06 goto Sleep
goto exit
:Sleep
shutdown /m \\PC1 /s
shutdown /h /f
:exit
exit

Bck1.bat源代码:
xcopy \\PC1\Pub\ D:\Backup\Data\Pub\ /c /d /h /i /k /o /r /s /v /x /exclude:\Backup\Setting\Exclude\Pub.exc /y >d:\Backup\Log\Pub.log
xcopy D:\Backup\Data\Pub\*.* \\PC1\Pub\*.* /c /d /h /i /l /s /y >d:\Backup\Log\DelPub.lst

Del1.bat源代码:
for /f "delims=" %%a in (d:\Backup\Log\DelPub.lst) do @if exist "%%a" del "%%a"
xcopy D:\Backup\Data\Pub\*.* \\PC1\Pub\*.* /c /d /h /i /l /s /y >d:\Backup\Log\DelPub.lst

可以看到,在上述代码中还会调用Pub.exc、Pub.log、DelPub.lst等文件,这三个文件分别是Xcopy的文件排除列表、备份日志、备份中需删除的文件列表。
网管们可对上述文件进行修改,适应各位的工作需要,如果有好的建议,不要忘了留给我啊!

biolover@freemail.china.com

2004-8-11 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
biolover
中级用户




积分 300
发帖 80
注册 2003-6-29
状态 离线
『第 2 楼』:  

最近发现上述批处理中还有2个小缺陷,一是不能删除写保护的文件,而是会留下空目录,现做一点改进:1.  Del1.bat的源代码中,将Del "%%a"加上/f的参数2.  在backup.bat的:shutdown上增加对Delfldrs.bat的调用,Delfldrs.bat的源代码为:for /r "D:\Backup" %%a in (.) do @rd "%%a" && (@echo "%%a" >D:\Backup\Log\DelFldrs.log)这会自动删除D:\Backup下的任何空目录,但如果该目录是写保护的还是无法删除,目前对于这一问题,尚无改进方法。另外一次目录删除只能删掉完全空的目录,对于空目录的无文件父目录要在下一次才能删除。

2004-8-15 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: