bat脚本实现按照月份对文件自动归档备份功能

491 阅读3分钟

脚本编写需求描述:

1)需要将某盘符文件夹下的pdf格式文件拷贝到另外一个文件夹用来备份;拷贝要求,需要根据文件最后的修改日期判断,保留最近60天之内的文件,60天之前的需要拷贝备份

举例:将【E:\FTP\dzfp\pdf】文件夹下的符合要求的pdf文件(60天之前的)拷贝到【E:\FTP\pdfBackup\pdf】

2)拷贝成功文件之后,需要在备份文件位置 【E:\FTP\pdfBackup\pdf】按照每个文件最后的修改日期新建文件目录,归档整理所有的文件

举例:若有两个pdf文件,一个日期是2021-03-10,一个日期是2021-02-15,那么最后备份整理之后需要新建两个文件夹,一个文件夹名为【202102】,另外一个文件夹名为【202103】,分别用来存放两个pdf文件,也就是按照月份归档整理

 需求确定之后编写bat批处理脚本

1)先拷贝文件,将符合要求的文件拷贝备份(60天之前的文件)

@echo off
 
::设置源文件目录
set "SrcDir=E:\FTP\dzfp\pdf"
::设置文件拷贝文件
set "DstDir=E:\FTP\pdfBackup\pdf"
::文件最后修改日期与当前时间的比较,N天之前设置为 -N
set "days=-60"

::1)根据pdf文件最后修改日期将其拷贝至DstDir目标文件
if not exist "%SrcDir%" echo;%SrcDir%不存在&pause&exit
if not exist "%DstDir%" md "%DstDir%"
forfiles /d %days% /p "%SrcDir%" /m *.pdf /s /c "cmd /c copy @path %DstDir%"

2)按照月份对备份文件夹中的文件做归档整理

setlocal enabledelayedexpansion
cd /d "%DstDir%"
for /f "tokens=1-3 delims=" %%a in ('dir /a-d/b') do (
	set "write_date=%%~ta"
	set "write_date=!write_date:/=!"
	set "write_date=!write_date:~0,6!"
	if not exist !write_date! md "!write_date!"
	copy /y "%%a" "!write_date!"
)

其核心基本已经实现,但是还需要继续完善一下,通过下图可以看到,当第一步备份成功之后,原始文件目录中已经做过备份的文件还存在(下图红框圈中部分)。所以我们需要清理掉;

同理,存档的文件目录,我们也需要将已经按照月份归档之后的多余的文件做一个删除 (红框圈中部分是已经做过归档的,需要删除)

3)最后整理,我们看一下完整的脚本

@echo off
 
::设置源文件目录
set "SrcDir=E:\FTP\dzfp\pdf"
::设置文件拷贝文件
set "DstDir=E:\FTP\pdfBackup\pdf"
::文件最后修改日期与当前时间的比较,N天之前设置为 -N
set "days=-60"

::1)根据pdf文件最后修改日期将其拷贝至DstDir目标文件
if not exist "%SrcDir%" echo;%SrcDir%不存在&pause&exit
if not exist "%DstDir%" md "%DstDir%"
forfiles /d %days% /p "%SrcDir%" /m *.pdf /s /c "cmd /c copy @path %DstDir%"
::2)将已经备份好的重复文件删除
forfiles /p "%SrcDir%" /d "%days%" /c "cmd /c del /f @path"
::3)根据最后修改日期将(DstDir目录中的)pdf文件按照文件名称(时间格式)归放
setlocal enabledelayedexpansion
cd /d "%DstDir%"
for /f "tokens=1-3 delims=" %%a in ('dir /a-d/b') do (
	set "write_date=%%~ta"
	set "write_date=!write_date:/=!"
	set "write_date=!write_date:~0,6!"
	if not exist !write_date! md "!write_date!"
	copy /y "%%a" "!write_date!"
)
::4)删除按照月份归档之后的重复文件
forfiles /p "%DstDir%" /d "%days%" /c "cmd /c del /f @path"

4)效果展示

备份之前

执行脚本备份之后

 

至此脚本编写完毕 ,配合window系统定时任务的设置,就可以实现自动备份文件的功能了