通过windows计划任务和Dos批处理备份文件

时间:2021-08-09 04:39:49

目的:

1.计划每天每半小时备份1次,每天8点开始,执行12小时,20点结束。

2.定期删除历史备份文件,由于每天有多个时间段备份,删除前只保留当天最后一个备份。

 

说明:

由于删除的操作只有每天第一次执行时才真正起作用,可将以下命令拆分成两个计划任务分别执行,当然也可一起执行。可具体根据执行的效率定夺。

 

实施:

1.将以下代码保存为back.bat,修改源文件路径和备份目录

@echo off
rem 备份指定目录下的文件
set
"Ymd=%date:~,4%-%date:~5,2%-%date:~8,2%"
set
"Sfm=%time:~,2%%time:~3,2%"
rem 备份后的路径为C:\backup\
2017-09-07\1430.bak。
echo f
| xcopy "源文件路径" "C:\backup\%Ymd%\%Sfm%.bak" >nul 2>nul

rem 删除指定路径下指定天数之前(以文件名中包含的日期字符串为准比如:
2009-12-25)的文件。
rem 指定待删除文件的存放路径
set SrcDir
=C:\backup\
rem 指定天数
set DaysAgo
=5
>>"%temp%/DstDate.vbs" echo LastDate=date()-%DaysAgo%
>>"%temp%/DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
>>"%temp%/DstDate.vbs" echo wscript.echo FmtDate
for /f %%a in ('cscript /nologo "%temp%/DstDate.vbs"') do (
set
"DstDate=%%a"
)
set DstDate
=%DstDate:~0,4%-%DstDate:~4,2%-%DstDate:~6,2%
setlocal enabledelayedexpansion

for /f "delims=" %%a in ('dir /b/s/ad "%SrcDir%"') do (
set
"FileDate=%%~na"
if "!FileDate!" leq "%DstDate%" (
if exist "%%a" (
rem 删除之前将最后一个文件备份到历史文件夹中
move
"%%a\2000.bak" "C:\backup\history\!FileDate!.bak"
rd
/s /q "%%a"
)
)
)


endlocal

:: exit

 2.设置windows计划任务,具体可参考http://blog.csdn.net/woshixuye/article/details/18050769