标题: 自动建立日期为名的目录备份数据
[打印本页]
作者: wubozh
时间: 2006-3-9 00:41
标题: 自动建立日期为名的目录备份数据
要在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
则批处理无法正常运行。请大家帮我看一下,问题出在哪儿?怎么解决?
作者: 3742668
时间: 2006-3-9 01:39
没事多看看 帮助与支持 了
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
以上代码均未测试,如果有错误勿怪。
作者: wubozh
时间: 2006-3-9 21:15
标题: 还是不行?
谢谢兄弟。
不过,这两种修改还是不行。如果改用这种方式:
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
经验证是可以的。但不知为什么上面的改法会失败?看来我要从头来看看批处理的基础教程才行。
作者: willsort
时间: 2006-3-9 22:19
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)
作者: wubozh
时间: 2006-3-9 22:36
标题: 还是没弄懂
还是没弄懂啊。我最先的那句批处理为什么不能正确执行呢?
作者: 3742668
时间: 2006-3-9 22:55
呵呵,不好意思,当时回贴的时候准备去睡觉了
所以难免出错,见谅。
第一个错误那是笔误,第二个是没有实践,凭空写的,原因在于本人没用过XCOPY,而解决这一类问题的我的通常做法就是用||。
LZ你出错的地方在于:
在命令行中,else 子句必须出现在与 if 后的命令相同的行中,你的那种写法其实else子句被解释为前面命令的参数,你需要先结束前面的子句:md %date:~4% & xcopy /e x:\*.* %date:~4%\再接else子句。
作者: wubozh
时间: 2006-3-10 21:49
标题: 谢谢
谢谢。果真如此。很怪了,我当时在win2000的命令行窗口查if命令的帮助,它让我用的是<>,而不是()。不然就不会走这么多的弯路了。不过也好,多学了些东西。
作者: wubozh
时间: 2006-3-10 21:50
标题: 看错了
刚才又进2000的命令行去看了一下。看错了。确实是()。不过它写的和<>差不多。真要命