您的位置:首页 > 其它

bat实现文件的自动增量备份和删除

2012-09-25 13:47 495 查看
四个文件,都用记事本新建,保存时,修改后缀即可。

一,MyDate.vbs

set wshnamed=wscript.arguments.named

days=wshnamed.item("days")

LastDate=date()-days

FmtDate=right(year(LastDate),4) & right("0" & month(LastDate),2) & right("0" & day(LastDate),2)

wscript.echo FmtDate

二,fileAddCopy1.bat

@echo off

rem 参数设置 start--------------------------------------------------

rem 指定备份的天数(指定天数前的增量备份将被删除)

set days=5

rem 指定备份源路径

rem 参照 set souPath=d:\opt\files

set souPath=d:\opt\files

rem 指定备份目标路径

rem 参照1 bakPath=\\111.111.111.11\F\files

rem 参照2 set bakPath=C:\Users\user\Desktop\bat备份\bak

set bakPath=\\111.111.111.11\F\files

rem 指定连接备份目标的机器驱动器

set radmin=\\111.111.111.11\F

rem 指定连接备份目标的用户名和密码

set radminN=admin

set radminP=1111111

rem 参数设置 end----------------------------------------------------

echo **********备份bat 开始**********

rem 远程文件路径识别关键字

set netF=\\

rem 空字符串

set nullStr=

rem 如果备份在远程机器,则连接

if %bakPath:~0,2%==%netF% (

net use %radmin% /user:%radminN% %radminP%

)

rem 备份源路经不存在

if not exist %souPath% (

echo 备份源路经不存在,请确认!

pause

pause

exit

)

rem 备份目标路经不存在

if not exist %bakPath% (

md %bakPath%

)

rem 系统日期

set date=%date%

rem 系统时间

set time=%time%

set dateStr=%date:~0,4%%date:~5,2%%date:~8,2%

set timeStr=%time:~0,2%%time:~3,2%%time:~6,2%

rem 日期时间字符串处理

set /a dateStr=%dateStr%/1

set /a hh=%time:~0,2%/1

set timeStr=0%hh%%time:~3,2%%time:~6,2%

set timeStr=%timeStr:~-6%

rem echo %dateStr%

rem echo %timeStr%

rem 日志文件

set copyLogF=%~n0_

rem xcopy备份日志

set nowBakLog=%~dp0log\%copyLogF%%dateStr%%timeStr%.log

rem 增量备份日志

set nowBakLogA=%~dp0log\%copyLogF%%dateStr%%timeStr%Add.log

rem 如果备份日志目录不存在,则新建

if not exist %~dp0log (

md %~dp0log

)

rem 删除与本次备份源文件的同名文件

if exist %nowBakLog% (

del %nowBakLog%

)

rem 删除与本次增量备份源文件的同名文件

if exist %nowBakLogA% (

del %nowBakLogA%

)

rem echo %souPath%

rem echo %bakPath%

rem echo %nowBakLog%

rem echo %nowBakLogA%

echo **********xcopy备份 开始**********

rem 执行备份

xcopy %souPath% %bakPath% /E/Y/D>%nowBakLog%

echo **********xcopy备份 结束**********

SETLOCAL ENABLEDELAYEDEXPANSION

rem 增量备份的源

for /f "delims=" %%b in (%nowBakLog%) do (

set "str=%%b"

set "str=!str:%souPath%=%bakPath%!"

rem 增量备份的文件日志

echo !str!>>%nowBakLogA%

)

set dateTimeStr=%dateStr%%timeStr%

rem echo %dateTimeStr%

rem 本次增量备份的路径

set nowBakPath=%bakPath%\%dateTimeStr%

rem echo 本次增量备份的路径:%nowBakPath%

rem echo %dateStr%

rem echo %timeStr%

echo %nowBakLogA%

rem 非文件路径识别的关键字

set notFilePathStr=复制

echo **********本次增量备份 开始**********

SETLOCAL ENABLEDELAYEDEXPANSION

for /f "delims=" %%a in (%nowBakLogA%) do (

rem 文件存在的场合

if exist %%a (

rem 取得的文件

rem echo %%a

set souF2=%%a

set souF2=!souF2:~0,2!

rem 取得文件路径,不包括驱动器

rem echo %%~pa

rem 文件的名称即后缀

rem echo %%~na%%~xa

rem echo %nowBakPath%%%~pa

rem 如果是远程机器文件

if !souF2!==%netF% (

set paAdd=%netF%%%~pa

set "paAdd=!paAdd:%bakPath%=%nullStr%!"

rem echo !paAdd!

rem 如果远程备份目录不存在,创建备份目录

if not exist %nowBakPath%!paAdd! (

md %nowBakPath%!paAdd!

)

copy /y "%%a" %nowBakPath%!paAdd!

) else (

rem 如果备份目录不存在,创建备份目录

if not exist %nowBakPath%%%~pa (

md %nowBakPath%%%~pa

)

copy /y "%%a" %nowBakPath%%%~pa

)

) else (

rem 是否是文件全路径,不是则不输出

set lastLine=%%a

set lastLine=!lastLine:~0,2!

rem echo !lastLine!

rem echo %notFilePathStr%

if not !lastLine!==%notFilePathStr% (

rem 输出无法备份的文件

echo %%a >>%nowBakPath%NotFindFile.txt

)

)

)

echo **********本次增量备份 结束**********

rem 取得指定备份天数前的日期

for /f %%a in ('cscript /nologo "%~dp0\MyDate.vbs" /days:%days%') do (

set agoDate=%%a

)

echo **********删除指定天数前的增量备份 开始**********

rem 循环备份目标目录,删除指定天数前的文件夹

SETLOCAL ENABLEDELAYEDEXPANSION

@for /d %%a in (%bakPath%\*) do (

rem 文件夹存在的场合

if exist %%a (

set folderName=%%~na

set folderName8=!folderName:~0,8!

rem 文件夹名称yyyymmdd匹配指定天数前的文件夹yyyymmdd

if !folderName8!==%agoDate% (

rem 删除

rd /q/s %%a

)

)

)

echo **********删除指定天数前的增量备份 结束**********

rem 如果备份在远程机器,则删除连接

if %bakPath:~0,2%==%netF% (

net use %radmin% /del

)

echo **********备份bat 结束**********

rem 调试成功后,可注释掉以下暂停

rem pause

rem pause

三,startBackupFile.bat

@echo off

rem 备份两个以上文件加的场合,用&&连接

%~dp0fileAddCopy1.bat&&%~dp0fileAddCopy2.bat

四,加入计划任务.bat

@echo off

Schtasks /create /tn “backupFile” /tr %~dp0startBackupFile.bat /sc daily /st 00:30

1,以编辑的方式打开fileAddCopy1.bat,在参数设置节中设置必要的参数

set days=5 表示备份5天的增量

set souPath= 表示备份源文件夹

set bakPath= 表示备份目标文件夹,远程机器必须以\\开头,

如\\11.111.111.11\F\filse

若备份目标文件在远程机器,则设定远程机器的驱动器

set radmin=\\11.111.111.11\F 表示备份目标文件夹在70的F盘,以便备份后删除远程的连接。

set radminN=admin 指定连接备份目标机器的用户名

set radminP=123456 指定连接备份目标机器的密码

2,以编辑的方式打开startBackupFile.bat

%~dp0fileAddCopy1.bat 表示执行当前目录下的fileAddCopy1.bat

说明: 若有两个或更多备份源文件夹,则复制一个fileAddCopy1.bat并命名为fileAddCopy2.bat,

设置参数后,在startBackupFile.bat中使用&&连接每个脚本

%~dp0fileAddCopy1.bat&&%~dp0fileAddCopy2.bat 表示执行按顺序执行两个备份脚本

3,以编辑的方式打开加入计划任务.bat,编辑后双击执行执行

Schtasks /create /tn “backupFile” /tr %~dp0startBackupFile.bat /sc daily /st 00:30

表示新建一个名为backupFile的任务计划程序,每天00:30执行与此脚本同目录下的startBackupFile.bat

此步骤也可计算机的管理工具或系统工具中,通过界面操作设定。

4,其它:

fileAddCopy1.bat和startBackupFile.bat都可以随时双击执行,每次执行后都会在脚本所在目录下的log文件夹

中生成与fileAddCopy1_yyyymmddhhMMss.log和fileAddCopy1_yyyymmddhhMMssAdd.log文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: