中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » 自动建立日期为名的目录备份数据
作者:
标题: 自动建立日期为名的目录备份数据 上一主题 | 下一主题
wubozh
初级用户





积分 40
发帖 18
注册 2006-2-22
状态 离线
『楼 主』:  自动建立日期为名的目录备份数据

要在win2000server下,用启动脚本自动在每天启动时建立日期为名的目录,并在此目录下备份数据。批处理内容如下:
if not exist %date:~4% md %date:~4% & xcopy /e x:\*.* %date:~4%\ & echo %date:~4%  %time%备份数据成功 >> log.txt
证明可以完成任务。但改写成:
if not exist %date:~4% md %date:~4% & xcopy /e x:\*.* %date:~4%\ else  echo %date:~4%  %time%备份数据失败 >> log.txt
则批处理无法正常运行。请大家帮我看一下,问题出在哪儿?怎么解决?

2006-3-9 00:41
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 2 楼』:  

没事多看看  帮助与支持 了
if not exist (%date:~4% md %date:~4% & xcopy /e x:\*.* %date:~4%\) else  echo %date:~4%  %time%备份数据失败 >> log.txt
加个括号看看,我记得以前碰到过这种情况
另:建议用 && 而不是用 & ,不用else改用  || ,写成
if not exist %date:~4% md %date:~4% && xcopy /e x:\*.* %date:~4%\ || echo %date:~4%  %time%备份数据失败 >> log.txt
以上代码均未测试,如果有错误勿怪。

2006-3-9 01:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wubozh
初级用户





积分 40
发帖 18
注册 2006-2-22
状态 离线
『第 3 楼』:  还是不行?

谢谢兄弟。
不过,这两种修改还是不行。如果改用这种方式:
Subst x: c:\PROGRA~1\zhou
d:
cd \wubozh
if not exist %date:~4% goto back
   echo %date:~4% %time% 备份数据失败!!!目录已经存在,或者今天已经做过备份?>> log.txt
   goto exit
:back
   md %date:~4%
   xcopy /e x:\*.* %date:~4%\
   echo %date:~4% %time% 备份数据成功 >> log.txt
   goto exit
:exit
   subst x: /d
经验证是可以的。但不知为什么上面的改法会失败?看来我要从头来看看批处理的基础教程才行。

2006-3-9 21:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 4 楼』:  

Re wubozh:

      3742668 兄的第一段代码括号加错了地方:

if not exist %date:~4% (md %date:~4% & xcopy /e x:\*.* %date:~4%\) else  echo %date:~4%  %time%备份数据失败 >> log.txt

      而 || 在这里并不使用,3742668 兄的第二段代码意味着,在 md 和 xcopy 中任一命令返回错误的 1 时才执行 echo,而非在 if not exist 返回 1 时执行。

      另外,xcopy 会自动创建不存在的目标目录,同时,它的开关 /d 可以选择更新比目标新的源文件。
if not exist %date:~4\nul (xcopy /d /e x:\*.* %date:~4%\ >nul 2>nul && echo %date:~4% %time% 备份数据成功>> log.txt || echo %date:~4% %time% 备份数据失败>> log.txt) else (echo %date:~4% %time% 目录已经存在>> log.txt)




※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2006-3-9 22:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wubozh
初级用户





积分 40
发帖 18
注册 2006-2-22
状态 离线
『第 5 楼』:  还是没弄懂

还是没弄懂啊。我最先的那句批处理为什么不能正确执行呢?

2006-3-9 22:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 6 楼』:  

呵呵,不好意思,当时回贴的时候准备去睡觉了
所以难免出错,见谅。
第一个错误那是笔误,第二个是没有实践,凭空写的,原因在于本人没用过XCOPY,而解决这一类问题的我的通常做法就是用||。
LZ你出错的地方在于:
在命令行中,else 子句必须出现在与 if 后的命令相同的行中,你的那种写法其实else子句被解释为前面命令的参数,你需要先结束前面的子句:md %date:~4% & xcopy /e x:\*.* %date:~4%\再接else子句。

2006-3-9 22:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wubozh
初级用户





积分 40
发帖 18
注册 2006-2-22
状态 离线
『第 7 楼』:  谢谢

谢谢。果真如此。很怪了,我当时在win2000的命令行窗口查if命令的帮助,它让我用的是<>,而不是()。不然就不会走这么多的弯路了。不过也好,多学了些东西。

2006-3-10 21:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
wubozh
初级用户





积分 40
发帖 18
注册 2006-2-22
状态 离线
『第 8 楼』:  看错了

刚才又进2000的命令行去看了一下。看错了。确实是()。不过它写的和<>差不多。真要命

2006-3-10 21:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: