Python 定时自动备份文件
简介:
通过generate.bat文件生成外置配置文本文件config.ini,python调用config.ini外置变量参数,从而实现设置定时备份文件的任务。
1. bat脚本部分代码
@echo off
setlogname=\backup.log
echo[Config]> config.ini
echo 输入拷贝的需备份文件夹路径:
set /p file_folder=folderDir=>>config.ini
echo 输入拷贝的目的文件夹路径:
echo %file_folder% >>config.ini
set /p back_folder=folderDir_Backup=>>config.ini
echo %back_folder% >>config.ini
echo 输入备份日志文件夹缓存路径:
set /p log_folder=logDir=>>config.ini
echo %log_folder%%logname% >>config.ini
echo 输入计划启动任务的时间:
set /p schedule_time=time=>>config.ini
echo %schedule_time% >>config.ini
rem 将路径中'\'转换成'//'
setstrFilePath=config.ini
setstrOld=\setstrNew=//
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in(%strFilePath%)do(set"var=%%i"if not !var!.==. (set"var=!var:%strOld%=%strNew%!"echo!var!!>>%strFilePath%.bk
))
move /y %strFilePath%.bk %strFilePath% >nul
echo 正在转换生成配置文件config.ini,请稍等...
timeout -t 3>nul
exit
2.cmd窗口填写需要备份的路径以及时间参数
3.config.ini 配置文件自动生成内容
[Config]folderDir= E://a
folderDir_Backup= E://b
logDir= E://backup.log
time=10:16
4.日志文件生成
5.backup.py 相关代码
import sys
import os
import time
import datetime
from datetime import datetime,timedelta
import shutil
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
fileFolder = config.get('Config','folderDir')
fileNamedir = config.get('Config','folderDir_Backup')
filebak_log = config.get('Config','logDir')defset_schedule_time(time_str):
config.set('Config','time', time_str)withopen('config.ini','w')as configfile:
config.write(configfile)'''
defwork():
replaced_string = fileNamedir.replace('//','\\')
fileName =(replaced_string)+r'\Backup_'+ time.strftime('%Y%m%d%H%M')print('----开始备份----')
shutil.make_archive(fileName,'zip', root_dir=fileFolder)print('----备份完成--->'+ time.strftime('%Y%m%d%H%M')+'.zip')withopen(filebak_log,'a')as filebak:
filebak.write(time.strftime('%Y-%m-%d %H:%M',time.localtime())+':'+'Successfull backup to %s'% fileName+'.zip!\n')defmain():print('----工具启动----')whileTrue:whileTrue:
now = datetime.now()
current_time =f"{now.hour:02d}:{now.minute:02d}"if current_time == config['Config']['time']:break
work()
time.sleep(180)if __name__ =='__main__':
main()
发布评论