"如果将备份的文件 放在本机,那么等于没有备份" 于是坐立不安.
于是考虑把 备份在用友服务器的 帐套文件拷贝出来. 用友的备份是自带的计划任务, 设定备份时间和帐套,以及保存时间,她就可以自动循环备份, 比如 保存七天, 她就会把七天前的备份删除.
而我现在需要把 这些备份文件夹 备份到另外一台机子上.
服务器的文件目录结构是这样的
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
注意 命令行 ,不能分行写. 还有一个遗憾就是, 密码 必须通过建相同用户来解决. 不能在命令行 最初来一个访问共享输入密码. |