当前位置:DOS资源站资料中心批处理教程 → 又一个自动备份文件的批处理(带日志显示)

又一个自动备份文件的批处理(带日志显示)

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2008-4-21 18:56:17

以前在网站上看到很多关于文件备份的软件,也有自己写的批处理程序,我也想起了一些,趁工作的休闲时间,我写了下面的批处理。
实现原理:查找某文件夹下面的文件创建时间,如果文件的创建时间早于设定的时间,那么就复制到指定文件夹,并删除原文件。
文件结构:config.ini; backup.vbs; back.bat
Config.ini 作用是设置的主目录下面哪些文件夹备份。
格式:(一行一个文件夹)
     短文件夹名
backup.vbs 调用的文件,用于计算时间。
修改里面的 dtmYesterday = DateAdd("d",-15,Date)  ;-15相当 取前15天,即半月前的日期。
back.bat   主文件
其中可以修改的设置:
::SoureDocument 设置需要备份的目录
set Soure=D:\机房检查\
::beforData 设置备份文件的保存地
set Back=F:\Backup
下面讲述源文件:
backup.vbs

dtmYesterday = DateAdd("d",-15,Date)        '取前15天,即半月前的日期

strYear      = DatePart("yyyy",dtmYesterday)
If DatePart("m",dtmYesterday) < 10 Then
        strMonth = 0 & DatePart("m",dtmYesterday)
Else
        strMonth = DatePart("m",dtmYesterday)
End If
If DatePart("d",dtmYesterday) < 10 Then
        strDay = 0 & DatePart("d",dtmYesterday)
Else
        strDay = DatePart("d",dtmYesterday)
End If
delDate = strYear &"-"& strMonth &"-" &strDay

Set WshShell = CreateObject("Wscript.Shell")
WshShell.Run("CMD /C set  beforData=" & delDate & " &back.bat")    '调用上面写的backup.bat,并传递前3周日期delDate, /C 执行后关闭cmd窗口,/K则不。
Set WshShell = Nothing
back.bat

::2007.10.22 18:44 updata
@echo off&title DOS资源站 www.cmdos.net
color 1f
mode con: cols=30 lines=3
echo 正在备份,请梢后!
::SoureDocument 设置需要备份的目录
set Soure=D:\机房检查\
::beforData 设置备份早于哪天的文件
set beforData=%beforData:~0,10%
::beforData 设置备份文件的保存地
set Back=F:\Backup
rem dir %Soure% /b /ad >>config.ini
if not exist %Back% echo 请建立 %Back% && pause
for /f %%i in (config.ini) do call :config %%i %Soure%
goto end
::查找目录文件
:config
rem echo %1 %2 >>config.log
set SoureDocument=D:\机房检查\
md %Back%^\%beforData%^\%1 2>>Error.log
set SoureDocument=%SoureDocument%%1
(
echo ================================================================
echo --------------%USERNAME%于%date:~0,10%对[%1]做了备份--------------)>>log-%date:~0,10%.txt
for /f "skip=7 tokens=1,2,3,4* delims=<>" %%i in ('dir %SoureDocument% /a /-c /tc') do call :Backsegment %%i %%j %%k %%l %%1
goto end
::备份主要代码
:Backsegment
::%1=文件建立日期 %2=文件建立时间 %3=密匙(判断是否是文件夹) %4=文件名 %5=文件父目录
rem echo %1 %2 %3 %4 %5 >>proc.log
set fDate=%1
set fTime=%2
set fType=%3
set fFile=%4
set Bdmt=%5
set backdate=%fDate:~2,2%%fDate:~5,2%%fDate:~8,2%%
set BackDocument=%Back%^\%beforData%^\%Bdmt%
set logmessage=[%backdate%] %fFile%:~0,30 备份到 %BackDocument%
if /i "%fDate%" LSS "%beforData%" (if NOT "%fType%"=="DIR" (copy /y %SoureDocument%^\%fFile% %BackDocument% >nul 2>>Error.log &&del /q %SoureDocument%^\%fFile% >nul 2>>Error.log && echo %logmessage% >>log-%date:~0,10%.txt))
goto DelTemp
::结束删除临时文件
:DelTemp
:end
如果不知道怎么设置config.ini,第一次运行的时间,请去掉BACK.bat中间的
rem dir %Soure% /b /ad >>config.ini 前面的rem
如上,欢迎大家增加功能并精简代码。