[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] 求助!!如何用批处理实现这个定时备份工作?新手请教!

求助!!如何用批处理实现这个定时备份工作?新手请教!想用bat实现如下的功能:
1、在D:\backup 下,建立一个以当前日期为名字的文件夹
2、如果D:\backup下已经有了3个文件夹(这个目录就是上面说的,以日期为名的文件夹),择删除日期最old的那个文件夹。
3、将需要备份的文件夹copy到新建的以日期为名字的文件夹中.
4、每2天运行1次(这个可以用win的系统任务实现)

第1步试验过这样的方法: 用 mkdir %date%,但,一次就建立2个文件夹 分别为“2008-08-01” 和 “星期五”。

请教高手帮助我,我自己折腾了一上午了。

————————版务提示————————
请不要在帖子中夹杂广告图片!!!
念在新手份上,暂时不予处罚。
若有再犯,将严厉惩处,请好自为之。
————————版务提示————————

date扩展的日期有空格,用""将其闭合,
set dat=0000-00-00 00:00
@echo off&setlocal enabledelayedexpansion
::1 md d:\backup\"%date%"
::2 for /d %%a in (*) do if "%%~ta" gtr "!dat!" set “dat=%%~ta”
     for /d %%a in (*) do if "%%~ta" equ "%dat%" echo %%a
::3 copy folder  NEWFOLDER
::4 at TIME /every:m,s,f,su COMMAND...

[ 本帖最后由 pusofalse 于 2008-8-4 10:53 编辑 ]
心绪平和,眼藏静谧。

TOP

第一步可以这样,mkdir %date:~0,10%

TOP

谢谢 版主 和 shqf 两位大侠。

另外:版主
md d:\backup\"%date" 这个是不是应该写成
mkdir d:\backup\"%date%" (少了一个%?)或者
mkdir d:\backup\"%dat" (少一个e?)

看不太懂 ::2 for /d %%a in (*) do if "%%~ta" gtr "%dat% set “dat=%%~ta”   
                       如果前面比后面大,则 dat= %%~ta?
                  for /d %%a in (*) do if "%%~ta" equ "%dat% echo %%a
                        如果相等 则 Echo%%a 啥意思呀?
总体上还是不懂
有看得懂得 “达人”详细解释一下吗?

[ 本帖最后由 zhaozr 于 2008-8-4 10:34 编辑 ]

TOP

多谢提醒,md d:\backup\"%date" 这句确实少了一个%,已修改。
for /d %%a in (*) do if "%%~ta" gtr "%dat% set “dat=%%~ta”
/d 参数可以以当前目录的文件夹作为循环范围(不包括子文件夹)。
%%~ta会扩展到%%a的修改日期,你的意思是。。。
如果一个文件夹名是20080708,是昨天建立的。而另一个20080707是今天建立的,要根据什么删除?是建立日期,还是以文件夹名中的日期信息删除?
这条语句错了,正确的应该是
@echo off&setlocal enabledelayedexpansion
for /d %%a in (*) do if "%%~ta" gtr "!dat!" set "dat=%%~ta"
忘记开启变量延迟了。
这条语句的意思是如果一个文件夹的日期信息大于dat的值,(这里的大于完全是对字符串的比较,而不是对数字的比较),则重设dat的值为当前文件夹的日期。
例:for /d循环到第一个文件夹时,dat的值0000-00-00 00:00   此文件夹的修改日期为2008-07-08 00:10,
字符串2008-07-08 00:10大于00-00-00 00:00 此时,重置dat的值为2008-07-08 00:10
循环到第二个时,此文件夹的修改日期为2008-07-07 18:10
而日期信息字符串2008-07-07 18:10小于dat的值2008-07-08 00:10
dat的值保持不变,如此循环完毕,最后dat的值便是修改日期最晚的那个。
  for /d %%a in (*) do if "%%~ta" equ "%dat% echo %%a
重复上步,只不过把大于改成了等于,如果文件夹的日期信息等于dat的值,则显示出来。。
呼呼。。好繁琐啊。。
心绪平和,眼藏静谧。

TOP

回复 6楼 的帖子

终于明白了 谢谢 版主辛苦了 !!哈哈 帖子收藏了

TOP

我的方法相对比较保守点了。呵呵,代码如下。

  1. echo wscript.echo dateadd("d",-0,date) >%tmp%\tmp.vbs
  2. for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set y=%%i
  3. for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set m=%%j
  4. for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set d=%%k
  5. if %m% LEQ 9 set m=0%m%
  6. if %d% LEQ 9 set d=0%d%
  7. set/a nowdate = %y%%m%%d%
  8. rem ----------上面是找出今天的日期,并赋值给 %nowdate%
  9. for /f "tokens=*" %%i in (%tmp%\time.tmp) do set nowtime=%%i
  10. set nowtime=%nowtime:~-5%
  11. rem --------这是找出当前时间,之所以加了后面这句话,是因为有些机子设了显示星期,这会成为障碍,所以设了后面这句来除去星期。
  12. echo wscript.echo dateadd("d",-%keepdays%,date) >%tmp%\tmp.vbs
  13. for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set y=%%i
  14. for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set m=%%j
  15. for /f "tokens=1,2,3* delims=-" %%i in ('cscript /nologo %tmp%\tmp.vbs') do set d=%%k
  16. if %m% LEQ 9 set m=0%m%
  17. if %d% LEQ 9 set d=0%d%
  18. set/a beforneeddays=%y%%m%%d%
  19. rem ------上面这些是找出指定的日期,比如说,五天前,这个几天用%keepdas%来指定。
  20. echo Today is [%nowdate%], this number will be new backup destrination directory...
  21. rem -----这里只是显示一下工具进度。
  22. md %usbdisk%\%nowdate% >nul 2>nul
  23. rem ----这里是仓建以今天日期为名的目录,这个%usbdisk%是变量,如何找,这里不贴了。
  24. dir %usbdisk%\ /ad/on/b>%tmp%\usbdir.tmp
  25. rem ------这里是列出U盘中所有的目录并生成一个临时文件备查。
  26. for /f "delims=" %%i in (%tmp%\usbdir.tmp) do (
  27.             if %%i lss %beforneeddays% (
  28.             rd /s/q %usbdisk%\%%i
  29.                         )
  30.                                                                        )
  31. rem -----至于这里,就不用说了吧,就是删除指定早于天数前的目录数据。
复制代码


关于类似的备份程序,我早写好了,并已经实现以下功能:
=====================================================
             Auto USB Disk Backup 1.03
              Written By Robert.King
                    2008.08.28
=====================================================

注意:
1.这个程序只保留用户指定天数内的备份,如果有早于这个天数的备份数据,则会被本程序自动清除,
  您需要注意一下。如果早期备份有重要数据,请自行更改目录名,目录名命名规则只要不是全数字
  就可以了,建议全用字母。
2.本程脚本只能向 USB 移动存储设备中存储备份数据!
3.本程序脚本只适用于
     Microsoft Windows XP 中、英文发行版
     Microsoft Windows 2003 中、英文发行版
4.使用前,请确定您的系统中的wmic可正常工作!确认方法:
  点击:开始----运行-----输入CMD回车-----输入wmic回车-----输入exit回车-----输入exit回车
5.本程序调用了微软的 devcon.exe 和 choice.exe 这两个程序,请保证在 Windows\System32 目录
  中或本程序当前所在目录中这个两程序存在。

本次更新内容:

--修正了磁盘空间容量数据超过变量精度范围问题,把容量精度修改为M
--添加了两个配置文件,更方便用户自己定义备份操作
--增强了程序在备份过程中的容错性
--细化了一部份日志记录的详细性

一、使用方法:
在程序脚本所在目录中有四个配置文件:

path.ini      --> 您需要备份的数据在什么位置,注意!每行结尾一定要是以"\"符号作为结尾的。
datatype.ini  --> 如有需要特殊指定只备份哪些类型的文件,则写在这个文件中。
keepdays.ini  --> 非常重要,在这个文件中指定你需要保留几天的备份,注意,文件内容只能是纯数字!
UDlabel.dat   --> 指定备份盘的卷标!

您只需把您需要备份的文件路径写入 path.ini 中,然后双击运行backup.bat这个脚本即可实现全自
动备份。

注意:配置文件内容不可为空内容!

如果您只想备份其中几种类型的文件,只需修改datatype.ini文件即可,默认本文件中写的是"*.*"
即所有的文件,比如,您只想备份Word文档和纯文本文档,您只需将文件内容改成如下即可:

*.doc
*.txt

注意:在以上四个配置文件中不可以存在空行!

备份时,将以YYYYMMDD的日期形式,在USB移动存储设备中建立目录,如果有多重配置,则会按配置文
件中的顺序,建立从数字1开始的子目录来对应不同配置备份。

二、程序功能:

1.本程序脚本可以自动从配置文件中读取相关配置信息,并自全自动完成备份工作;
2.在备份过程中,本程序脚本可全自动搜索 USB 移动存储设备,并设定其为目标磁盘;
3.如果您是长时间连续备份,则无需拔下USB移动存储设备,本程序会自动挂载 USB移动存储设备,并
  在备份完成后,自动卸载您的 USB移动存储设备,以使其脱机,保证数据安全,同时保护 USB移动
  存储设备 的使用寿命;
4.如备份时,您没有接入 USB 移动存储设备,则程序会报警,并等待三十秒钟,则您有三十秒时间可
  以接驳您的USB存储设备;(技巧提示:如果您需要更多时间准备,可以选重试,以再获得三十秒。)
5.所有的工作都将被记录进程序脚本所在的目录中的备份文日志记录文件中,文件名为 backup.log,
  以便于日后查阅以前的备份工作日志记录;
6.另外,本程序脚本只适用于中英文版操作系统,其它语种操作系统未经测试,暂时视为不支持。

三、程序容错

1.本程序脚本在备份时,自动探测所需备份的数据是否超过 USB 移动存储设备的剩余空间大小,如果
  超出,则会报警提示,并跳过当前一行配置备份,然后继续下一配置的备份,并输出记录到日志文件
  中备查;
2.支持自动判断配置文件丢失或空配置错误,并输出记录到日志文件中备查;
3.可以发现配置格式正确,但是又无与之匹配文件与之对应的错误,程序会自动跳过这部份备份,并输
  出记录到日志文件中备查;
4.如果指定类型文件并不存在,则本程序会跳过当前这个类型,继续备份。

四、建议

1.强烈建议在使用本程序备份时,USB 移动存储设备专盘专用,因涉及旧备份数据清除问题,所以,为
  了避免给您造所不必要的损失,请尽可能专盘专用。
2.如果备份时间存在断层,比如,十月一日放长假,时间超过用户指定的天数,则,建议在运行本程序
  前,请先手  将旧的备份文件移动到一个自己新建的目录中。
  注意:在自建目录时,请不要使用数字命名,而以字母命名。

五、关于

本程序脚本为Robert.King独立制做完成,作者不希望这份程序被随意拷贝及使用,但不拒绝对其进行研
究测试,如果您有更好的想法或建议,可以直接联系作者本人:

文件列表:
backup.bat-----------主程序文件
datatype.ini------------配置文件:定义要备份的数据文件类型
path.ini----------------配置文件:定义用户需备份数据所在的路径
keepdays.ini------------配置文件:定义用户需保留几天的备份
UDlabel.dat-------------信息文件:保存外置USB存储器的相关信息
reginfo.txt-------------本机注册信息文件
devcon.exe--------------本程序运行所必需的命令(提取自微软开发工具)
CHOICE.EXE--------------本程序运行所需的命令行(提取自Windows 2003)
scaninfo.exe------------本程序运行所必需的命令
readme.txt--------------本说程序的说明文件
backup.log--------------本程序在工作时生成的日志文件

Makereg.BAT-------------注册码生成器

[ 本帖最后由 AppleWolf 于 2008-9-6 01:46 编辑 ]

TOP

返回列表