[DOS批处理] 自动备份

 

那一天看了一句话 "如果将备份的文件 放在本机,那么等于没有备份" 于是坐立不安.
于是考虑把 备份在用友服务器的 帐套文件拷贝出来. 用友的备份是自带的计划任务, 设定备份时间和帐套,以及保存时间,她就可以自动循环备份, 比如 保存七天, 她就会把七天前的备份删除.

而我现在需要把 这些备份文件夹 备份到另外一台机子上.
服务器的文件目录结构是这样的
G:/dayBack|zt0001/20061212
                                 /20061213
                                 /20061214
                                 /20061215
                                 /20061216
                                 /20061217
                                 /20061218

因为文件夹的名字是变动的,所以我考虑用批处理去操作.
第一步  获取文件名样式  开始在我自己的机子上 通过 %date%, (输出是2006-12-28 星期四) 来截取,
%date:~0,4%%date:~5,2%date:~8,2% 获得一个20061228的样式. 一切都差不多了,放到另外一台机子上发现老执行不了, 最后发现 %date%输出的时间 格式为:星期四  2006-12-28 倒过来得.  真是麻烦. 看了环境变量的考虑 也是非常重要的.  这个好处理. 

第二步 将文件拷入我所创建的文家夹中, 文件是一一对应的. 这是我最初的两条批处理命令


mkdir g:/dayBack/%date:~4,4%%date:~9,2%%date:~12,2%
copy //192.168.0.241/e$/dayBack/ZT001/%date:~4,4%%date:~9,2%%date:~12,2%/*.*   g:/dayBack/%date:~4,4%%date:~9,2%%date:~12,2%    >%date:~4,4%%date:~9,2%%date:~12,2%.log

后面还加了一个重定向输入日志 (感觉贼专业)

后来考虑 这样会有问题, 硬盘毕竟大小受限制, 所以肯定要考虑一个 备份周期, 以往我都是习惯用星期几的几来做覆盖循环的, 灵活性不过,而且和现在的服务器目录不甚匹配. 于是考虑 要删掉文件夹来循环备份.

最初的考虑是采用 %date% 如何加减来获取十天前的 文件夹名称的, 一直没找到 方法, 后来看到批处理的for循环可以把输出 当输入,这样我突然想到按文件夹建立时间来 排序 获取可删目录名.


for /f  "skip=6" %%a in ('dir g:/test') do @if exist g:/test/%%a  ECHO g:/test/%%a

这句是我测试的时候 反复用到的 语句, 发现dir 无法按时间的降序排列, 可能是我参数 选错了. 于是到cn-dos去询问了一下 果然 是参数 没选好,格式也错了.   因为用排序,并且为降序 用到的参数, /OD  或 /ts  因为要倒序,所以我试着用 /-od,发现参数这样写不对. 人家提醒要用  /o:-d . 并且加了 /ad  和 /b  简化了输出,这样输出的结果就是目录名排列了.  直观方便了很多.  高手就是高手.

for /f  "skip=6" %%a in ('dir /b/ad/o:-d g:/test') do @if exist g:/test/%%a  ECHO g:/test/%%a

这是最后的 样式. 跳过前六个文件,  删除余下的.

基本上大功告成.

以下是完整的处理语句 六行 花了一个下午. 值!

for /f  "skip=6" %%a in ('dir /b/ad/o:-d g:/dayBack') do @if exist g:/dayBack/%%a  del /q g:/dayBack/%%a/*
for /f  "skip=6" %%a in ('dir /b/ad/o:-d g:/dayBack') do @if exist g:/dayBack/%%a  rmdir  g:/dayBack/%%a


IF EXIST g:/dayBack/%date:~4,4%%date:~9,2%%date:~12,2% DEL /Q g:/dayBack/%date:~4,4%%date:~9,2%%date:~12,2%/*.*
IF EXIST g:/dayBack/%date:~4,4%%date:~9,2%%date:~12,2% RMDIR g:/dayBack/%date:~4,4%%date:~9,2%%date:~12,2%

IF exist //192.168.0.241/e$/dayBack/ZT001/%date:~4,4%%date:~9,2%%date:~12,2%   mkdir g:/dayBack/%date:~4,4%%date:~9,2%%date:~12,2%
IF exist g:/dayBack/%date:~4,4%%date:~9,2%%date:~12,2%  copy //192.168.0.241/e$/dayBack/ZT001/%date:~4,4%%date:~9,2%%date:~12,2%/*.*   g:/dayBack/%date:~4,4%%date:~9,2%%date:~12,2%    >%date:~4,4%%date:~9,2%%date:~12,2%.log

 

注意 命令行 ,不能分行写.   还有一个遗憾就是, 密码 必须通过建相同用户来解决.  不能在命令行 最初来一个访问共享输入密码.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值