脚本编写需求描述:
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系统定时任务的设置,就可以实现自动备份文件的功能了