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文件
一,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文件
相关文章推荐
- 用批处理文件自动备份文件及文件夹,并自动删除n天前的文件_DOS/BAT
- linux下mysql自动备份和自动删除文件功能实现
- 利用bat,vb实现根据日期自动备份文件
- 使用ssh实现oracle数据库备份文件自动异地存储
- 利用bat脚本语言实现windows下文件的可靠复制与删除
- Linux自动备份文件到远程FTP服务器并删除指定日期前的备份shell
- 自动删除历史备份的dmp文件
- linux下面自动打包备份并且删除5 天前的文件
- log4net自动删除日志文件【实现】
- bat 实现批量备份文件
- CentOS Linux自动备份文件到远程FTP服务器并删除指定日期前的备份Shell脚本
- 用批处理文件自动备份文件及文件夹,并自动删除n天前的文件
- SQL定时自动备份,并将备份文件加密压缩并自动下载的实现
- Centos自动删除过期备份或者文件
- bat命令备份oracle数据库,并且删除7天之前的数据文件
- 通过Robocopy+DOS 命令+Windows排程实现自动备份(将特定文件/目录备份至自动创建的以年月日命名的目标目录)
- 文件日志自动删除备份
- 实现MyBatis Mapper XML文件增量动态刷新,自动加载,热加载,热部署
- (windows)python脚本:自动备份并压缩文件,同时删除过期文件
- 技术QA:如何在Windows Server 2008中实现自动删除用户配置文件?