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

本文介绍了如何使用VBScript和批处理脚本实现文件的自动增量备份和过期备份删除。详细步骤包括设置参数,利用xcopy进行备份,处理增量文件,以及根据日期删除指定天数前的备份。此外,还提供了如何将该脚本配置为计划任务的方法。
部署运行你感兴趣的模型镜像

四个文件,都用记事本新建,保存时,修改后缀即可。

 

一,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文件

 

 

 

您可能感兴趣的与本文相关的镜像

AutoGPT

AutoGPT

AI应用

AutoGPT于2023年3月30日由游戏公司Significant Gravitas Ltd.的创始人Toran Bruce Richards发布,AutoGPT是一个AI agent(智能体),也是开源的应用程序,结合了GPT-4和GPT-3.5技术,给定自然语言的目标,它将尝试通过将其分解成子任务,并在自动循环中使用互联网和其他工具来实现这一目标

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值