求助各位老师,本人在公司里做运维,因服务器硬盘空间所限,所以把数据库备份放在3个空间,本机G:\Data_cope\,是数据每天自动备份,本机I:\SQL_DB_BAK\,是另外一个存储的空间,局域网共享\\192.168.163.2\可写入\oa_db_bak\是第三个可写入共享空间。
举个例比如今天是20号,局域网可以保留13天的数据,本机I盘可以保留6天,本机G盘可以保留6天.程序先比较局域网共享的备份文件,如果超过25天的数据会删除,再去比较I盘,如果超过12天的移动到局域网共享空间,最后去比较G盘,如果超过6天会移动到I盘。代码如下:- @echo off&setlocal enabledelayedexpansion
- ::设置服务器绝对路径。
- set services=\\192.168.163.2\可写入\oa_db_bak\
- ::设置日常数据库备份路径。
- set dbbak=G:\Data_cope\
- ::设置临时存储数据库路径。
- set linshi=I:\SQL_DB_BAK\
- ::设置日志路径。
- set logtxt=\\192.168.163.2\可写入\log\
- ::设置瑞星杀毒服务器(192.168.163.2)数据库保留的天数
- set DaysAgo=25
- ::设置临时存储(I盘)数据库保留的天数。
- set DaysAgo1=12
- ::设置日常数据库(G盘)备份保留的天数。
- set DaysAgo2=6
-
- ::获取当前日期字符串(d为年月日,t为时分秒,dt为年月日时分秒)。
- for /f "tokens=1,2,3 delims=/- " %%a in ("%date%") do @set D=%%a-%%b-%%c
- rem echo 获取当前时间字符串
- for /f "tokens=1,2,3 delims=:." %%a in ("%time%") do @set T=%%a:%%b:%%c
- rem echo 如当前小时小于10,将空格替换为0
- set T=%T: =0%
- set dt=%D% %T%
-
- ::计算离今天相差“DaysAgo”之前的日期。
- >"%temp%\MyDate.vbs" echo LastDate=date()-%DaysAgo%
- >>"%temp%\MyDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day
-
- (LastDate),2)
- >>"%temp%\MyDate.vbs" echo wscript.echo FmtDate
- for /f %%a in ('cscript /nologo "%temp%\MyDate.vbs"') do (
- set DstDate=%%a
- )
- set DstDate=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
- echo %DaysAgo%天之前的日期是:%DstDate%。
- echo 正在删除%DstDate%之前的备份数据库..
- for /r "%services%" %%i in (*) do (
- set str=%%~ti
- set str=!str:~0,10!
- ::str为获取指定文件的修改日期。
- if !str! LEQ %DstDate% del "%%i"
- )
- echo 机房服务器超过%DaysAgo%天之前在%dt%已经删除。|>>"%logtxt%%d%.txt"
- echo 机房服务器超过%DaysAgo%天之前在%dt%已经删除。
-
- echo 正在处理本机I盘数据库备份文件。
- ::计算离今天与%DaysAgo1%之前的日期。
- >"%temp%\MyDate.vbs" echo LastDate=date()-%DaysAgo1%
- >>"%temp%\MyDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day
-
- (LastDate),2)
- >>"%temp%\MyDate.vbs" echo wscript.echo FmtDate
- for /f %%a in ('cscript /nologo "%temp%\MyDate.vbs"') do (
- set DstDate=%%a
- )
- set DstDate1=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
- echo %DaysAgo1%天之前的日期是:%DstDate1%。
- for /r "%linshi%" %%j in (*) do (
- set str=%%~ti
- set str=!str:~0,10!
- ::str为获取指定文件的修改日期。
- if !str! LEQ %DstDate1% move "%%j" "%services%"
- )
- echo 本机I盘数据库备份超过%DaysAgo1%天之前在%dt%已经移动到%services%。|>>"%logtxt%%d%.txt"
- echo 本机I盘数据库备份超过%DaysAgo1%天之前在%dt%已经移动到%services%。
- pause
-
- echo 正在处理本机G盘数据库备份文件。
- ::计算离今天与%DaysAgo2%之前的日期。
- >"%temp%\MyDate.vbs" echo LastDate=date()-%DaysAgo2%
- >>"%temp%\MyDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day
-
- (LastDate),2)
- >>"%temp%\MyDate.vbs" echo wscript.echo FmtDate
- for /f %%a in ('cscript /nologo "%temp%\MyDate.vbs"') do (
- set DstDate=%%a
- )
- set DstDate2=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
- echo %DaysAgo2%天之前的日期是:%DstDate2%。
- for /r "%dbbak%" %%k in (*) do (
- set str=%%~ti
- set str=!str:~0,10!
- ::str为获取指定文件的修改日期。
- if !str! LEQ %DaysAgo2% move "%%k" "%linshi%"
- )
- echo 本机G盘数据库备份超过%DaysAgo2%天之前在%dt%已经移动到%linshi%。|>>"%logtxt%%d%.txt"
- echo 本机G盘数据库备份超过%DaysAgo2%天之前在%dt%已经移动到%linshi%。
复制代码 现在问题来了,
1.增加一个功能,比如程序比较文件时先PING一个局域网共享IP,如果不通,刚在本机某个目录记录哪个时间不通。如果通就执行文件移动操作。
2.获取的时间在移动后都是一样,这个应该在哪里增加,让代码结果显示哪个时间完成操作的?
3.不想代码太过冗长,所以哪里有简短代码的地方? |