![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-17 22:22 |
共 47,814 主题排行 / 349,907 发帖 / 今日 4 篇 / 48,259 会员排行 |
| DOS疑难解答 & 问题讨论 (解答室) » 自动建立日期为名的目录备份数据 |
| 可打印版本 841 / 7 |
| 第1楼 wubozh | 发表于 2006-03-09 00:41 |
| 初级用户 发帖 18 积分 40 | |
|
自动建立日期为名的目录备份数据 要在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 则批处理无法正常运行。请大家帮我看一下,问题出在哪儿?怎么解决? |
|
| 第2楼 3742668 | 发表于 2006-03-09 01:39 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
没事多看看 帮助与支持 了
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 以上代码均未测试,如果有错误勿怪。 |
|
| 第3楼 wubozh | 发表于 2006-03-09 21:15 |
| 初级用户 发帖 18 积分 40 | |
|
还是不行? 谢谢兄弟。
不过,这两种修改还是不行。如果改用这种方式: 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 经验证是可以的。但不知为什么上面的改法会失败?看来我要从头来看看批处理的基础教程才行。 |
|
| 第4楼 willsort | 发表于 2006-03-09 22:19 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
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 可以选择更新比目标新的源文件。 |
|
| 第5楼 wubozh | 发表于 2006-03-09 22:36 |
| 初级用户 发帖 18 积分 40 | |
|
还是没弄懂 还是没弄懂啊。我最先的那句批处理为什么不能正确执行呢?
|
|
| 第6楼 3742668 | 发表于 2006-03-09 22:55 |
| 荣誉版主 发帖 718 积分 2,013 | |
|
呵呵,不好意思,当时回贴的时候准备去睡觉了
所以难免出错,见谅。 第一个错误那是笔误,第二个是没有实践,凭空写的,原因在于本人没用过XCOPY,而解决这一类问题的我的通常做法就是用||。 LZ你出错的地方在于: 在命令行中,else 子句必须出现在与 if 后的命令相同的行中,你的那种写法其实else子句被解释为前面命令的参数,你需要先结束前面的子句:md %date:~4% & xcopy /e x:\*.* %date:~4%\再接else子句。 |
|
| 第7楼 wubozh | 发表于 2006-03-10 21:49 |
| 初级用户 发帖 18 积分 40 | |
|
谢谢 谢谢。果真如此。很怪了,我当时在win2000的命令行窗口查if命令的帮助,它让我用的是<>,而不是()。不然就不会走这么多的弯路了。不过也好,多学了些东西。
|
|
| 第8楼 wubozh | 发表于 2006-03-10 21:50 |
| 初级用户 发帖 18 积分 40 | |
|
看错了 刚才又进2000的命令行去看了一下。看错了。确实是()。不过它写的和<>差不多。真要命
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |