复制代码 代码如下:
@echo off
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 文件备份器V2.3(for WinXP only) Code by JM 2006-11-4 QQ:13132002
:: 出处:http://www.cn-dos.net/forum/viewthread.php?tid=20747
::
:: 功能:1、自由指定要备份的目录(或文件)、位置、备份时间和任务名称
:: 2、能检测输入是否正确
:: 3、能生成备份日志
:: 4、能多次添加备份任务
:: 5、能批量停止指定的备份任务
:: 6、能自动删除由本程序产生且不再使用的批处理程序和注册表信息
:: 7、能从备份文件中恢复文件到源文件中,并保持各文件的原始属性不变
::
:: 原理:只有当源文件修改时间比目标文件的修改时间新时才更新文件
::
:: 要修改或完善的地方:
::
:: ① 统一标记是文件还是文件夹;
:: ② 禁止把文件备份到本文件夹及其子文件夹中去
::
:: 更新历史:
::
:: 06.11.4
::
:: 增加了记录备份文件更新列表的功能,进一步完善日志功能;
::
:: 06.10.19
::
:: 因at命令只能以管理员权限运行,此次更新增加了用户权限的验证;添加了
:: xcopy的/c参数,使得复制出错的时候(尽管出现这种情况的几率非常低),能备份
:: 尽可能多的文件;精简了部分代码;
::
:: 06.9.14
::
:: 对提取文件属性的代码做了优化,使得生成备份批处理的效率大大提高,
:: 感谢pengfei提供代码;修改了几处错误和疏漏;对代码进行分块放置以便日后
:: 的维护;此为V2.3
::
:: 06.9.3
::
:: 由于上次精简过度,代码运行会出错,今天修改了一处致命错误,感谢
:: pengfei的测试;增加了一些操作提示和出错检测;
::
:: 06.8.5
::
:: 添加了备份空目录的参数,精简了部分代码;
:: 06.8.1
::
:: 实现了用同一条命令复制文件和文件夹;修正了几处错误;
:: 06.7.29
::
:: 精简了获取属性的代码,感谢willsort提供;
:: 06.7.28
:: 完善了对备份后的文件进行恢复的操作,使得恢复操作对文件或者文件夹
:: 都适用;此为V2.2
::
:: 06.7.1
:: 完善了对日期的检测;
:: 06.6.29
:: 增加了恢复文件的功能;对生成后的文件的属性进行了调整;此为V2.1;
:: 06.6.20
:: 对显示各分区磁盘剩余空间的代码进行了修改,只显示磁盘的剩余空间,
:: 而不会画蛇添足地显示光盘剩余空间;
:: 06.6.15
:: 增加了日期和时间输入错误检测功能(感谢bagpipe提供代码);
:: 06.6.12
:: 修改了查询各分区剩余空间的代码,当磁盘卷标名为中文时也能准确排版。
:: 感谢willsort作深入分析并提供代码;当备份任务创建后,能自动打开备份后
:: 的文件夹和创建日志,以便查看备份创建结果;彻底删除无用文件;精简了部
:: 分代码;
:: 06.6.10
:: 修正了一处错误;精简了部分代码;
:: 06.6.9
:: 更改备份日志代码,将使备份日志体积减少近一半;更改了实现文件名自动
:: 完成这一功能的功能键(感谢electronixtar的提醒),但需要注册表中的特定键
:: 值为默认设置(有关讨论请参考http://www.cn-dos.net/forum/viewthread.php?
:: tid=21091&fpage=1);
:: 06.6.6
:: 修改了部分代码,使得当需要每天备份的功能时,避免了烦琐的输入;增加
:: 了文件名自动完成的功能(感谢willsort提出设想并提供代码);此为V1.9;
:: 06.6.4
:: 增加了如下功能:当保存备份文件时,如果要对文件夹进行追加或者覆盖等
:: 操作,可先查看该文件夹下的内容再作决定;补充了备份风险提示;
:: 06.6.3
:: 对备份后文件的保存位置这部分代码进行了修改,使得程序能自动适应备份
:: 对象为文件和文件夹两种情况,使备份后文件夹的目录结构得到保持,感谢
:: willsort提供代码;当备份文件即将保存到一个已经存在的目录下时,增加了允
:: 许追加至该目录的选择;
:: 06.6.2
:: 添加和修改了了如下功能:可以选择在开机时是否自动运行备份任务程序;
:: 开始运行本程序或者停止某项备份任务时,自动删除当前计划任务中不再使用的
:: 备份任务程序,并删除对应的注册表键值,以减少系统垃圾;更改了备份任务程
:: 序的保存位置;去除了盘符小写转换为大写的鸡肋代码;增强了路径输入为空时
:: 的检测(感谢willsort提供代码);修改了几处错误;精简了部分代码,此为V1.8;
:: 06.5.31
:: 在注册表中( 位置是:HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/
:: CurrentVersion/Run) 增添了开机自动运行备份程序的键值( 以备份任务名称作
:: 为键值) ,尽可能减少错过备份的情况;如果更新了内容,则备份完毕后自动打
:: 开备份日志;修正了几处错误;此为V1.7;
:: 06.5.30
:: 完善了备份流程,在列出创建备份任务的清单时,可更改备份任务内容;在
:: 创建备份任务的同时,强制启动计划任务服务,并立即作复制操作;显示各磁盘
:: 分区剩余空间情况的时候,增加了显示磁盘卷标名的功能;更改了注意事项界面
:: 中的前景色和背景色,使色调显得明快而柔和;
:: 06.5.28
:: 增加了在每周的指定日期进行备份的功能;添加了当计划任务出错时提交报
:: 告的功能;完善了日志记录功能,只有当文件更新时才会改写日志;完善了注意
:: 事项中的内容;增加了删除所有计划任务的功能;此为 V1.6 ;
:: 06.5.26
:: 增加了不允许把保存路径设置为与源文件路径相同、或者为源文件某一目录
:: 的功能;添加了注意事项提示功能;修正了几处错误;部分代码参照中国DOS 联
:: 盟论坛(http://www.cn-dos.net/forum) 网友bagpipe所发帖子,使一些代码得
:: 到精简;此为V1.5;
:: 06.5.25
:: 增加了把备份文件的保存目录拖曳到窗口执行的功能;增加了批量停止指定
:: 备份任务的功能;修改了几处错误;精简了部分代码;此为V1.4;
:: 06.5.24
:: 增加了把要备份的文件拖曳到窗口执行的功能;感谢中国DOS 联盟论坛
:: (http://www.cn-dos.net/forum)版主willsort提供代码;此为V1.3;
:: 06.5.23
:: 修正了一处关键错误,使得备份能顺利进行下去;在中国DOS 联盟论坛
:: (http://www.cn-dos.net/forum)版主willsort等网友的热心帮助下,增强了程
:: 序输入错误检测能力,并修正了一些拼写错误,在此深表谢意;
:: 06.5.22
:: 修改了显示各分区剩余空间的代码,使显示界面的框线自动适应剩余空间条
:: 目下不同长度的字符;
:: 06.5.21
:: 增添了停止指定备份任务的功能,使本程序的功能进一步完善;增添了将备
:: 份后的文件设置为" 系统+ 只读" 属性的功能,从而在一定程度上提高了备份后
:: 的文件的安全;修正了几处错误;优化了部分代码;此为V1.2;
:: 06.5.20
:: 头两天的算法存在备份不完全的弊端,今天把copy命令更改为xcopy 命令,
:: 从而使本程序能够备份指定目录下除空目录之外的所有文件( 包括目录之下还有
:: 子目录、子目录内含有文件的文件嵌套) ,并使代码得到了精简;头两天的代码
:: 生成备份任务批处理的时候,因为自动命名的程序名称是固定的,如果有不同的
:: 备份任务的话,最后一次任务将把上一次的任务删除,今天把备份任务的命名改
:: 为手动指定;增添了多次添加备份任务的功能;此为V1.1;
:: 06.5.19
:: 增加了系统检测功能,使得该程序只能运行于XP操作系统下;编写输入错误
:: 检测代码,使输入错误能得到及时更改;统一了交互界面,看上去更加美观;本
:: 来想增加指定每周的某几天进行备份操作的功能,但是一直未能实现,只好暂时
:: 放弃,留待下几个版本解决;优化了部分冗余代码;
:: 06.5.18
:: 在对本人电脑上重要资料进行备份的时候,深感手工备份的烦琐,而网上的
:: 备份软件又有诸多限制,正好本人在自学DOS 批处理编程,于是花了半天的时间
:: 来构思本程序的核心功能,编写初步代码;此为V1.0;
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
rem if not "%1"=="$" %comspec% /f:on /c %0 $ && goto :eof
:: 屏蔽掉上一句,用Tab/Shift+Tab可实现同样功能
mode con lines=26
title 文件备份器-文件备份器
color 1f
cls
rem =========检测系统是否支持本程序=============
:check_system
ver|find "XP">nul || goto system_error
rem =========检测当前用户是否具有管理员权限=============
:check_popedom
net users %username%|findstr /i "/*administrator">nul||goto popedom_error
call :del_nouse
rem =======输入要备份文件的路径并检测输入是否正确=======
:input_source
mode con lines=26
cls
color 1f
title 文件备份器-请输入源文件路径
echo