#Requires AutoHotkey v1.1
#NoEnv
#SingleInstance Force
SetWorkingDir %A_ScriptDir%
Global IsRunning := false
Global RegKey := "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run"
Global AppName := "AutoBackupTool"
IniFile := A_ScriptDir . "\config.ini"
IniRead, SavedSourceFile, %IniFile%, Settings, SourceFile, %A_Space%
IniRead, SavedTargetDir, %IniFile%, Settings, TargetDir, %A_Space%
IniRead, SavedTime, %IniFile%, Settings, TimeStr, %A_Now%
IniRead, SavedAutoStart, %IniFile%, Settings, AutoStart, 0
Menu, Tray, NoStandard
Menu, Tray, Add, 显示主界面, RestoreWindow
Menu, Tray, Add, 彻底退出软件, ExitProgram
Menu, Tray, Default, 显示主界面
Gui, Font, s10, 微软雅黑
Gui, Add, Text, x15 y20 w90 h25, 备份源文件:
Gui, Add, Edit, x105 y15 w270 h25 vSourceFile ReadOnly, %SavedSourceFile%
Gui, Add, Button, x385 y14 w75 h27 vBtnSelSrc gBtnSelSrc, 选择文件
Gui, Add, Text, x15 y55 w90 h25, 目标文件夹:
Gui, Add, Edit, x105 y50 w270 h25 vTargetDir ReadOnly, %SavedTargetDir%
Gui, Add, Button, x385 y49 w75 h27 vBtnSelTgt gBtnSelTgt, 选择目录
Gui, Add, Text, x15 y90 w90 h25, 定时:
Gui, Add, DateTime, x105 y85 w120 h25 vTimeStr Choose%SavedTime% 1, HH:mm
Gui, Add, Checkbox, x235 y87 w100 h25 vAutoStart gToggleAutoStart Checked%SavedAutoStart%, 开机启动
Gui, Add, Button, x15 y140 w100 h35 gStartTask vBtnStart, ▶ 启动定时
Gui, Add, Button, x125 y140 w100 h35 gStopTask vBtnStop Disabled, ⏸ 停止定时
Gui, Add, Button, x235 y140 w100 h35 gRunNow vBtnTest, ⚡ 立即测试
Gui, Add, Button, x360 y140 w100 h35 gExitProgram, ❌ 退出软件
Gui, Add, Progress, x15 y195 w445 h22 vMyProgress -Smooth, 0
Gui, Add, Text, x15 y220 w445 h20 vProgressText, 状态: 等待任务开始...
Gui, Add, Text, x15 y250 w100 h20, 运行日志:
Gui, Font, s9
Gui, Add, Edit, x15 y270 w445 h150 vLogBox ReadOnly -Wrap +HScroll,
if (SavedSourceFile != "" && SavedTargetDir != "") {
Gui, Show, Hide w475 h440, 自动备份工具
GoSub, StartTask
AddLog("已自动进入后台运行模式。")
} else {
Gui, Show, w475 h440, 自动备份工具
AddLog("软件已启动,就绪。")
}
return
ToggleAutoStart:
Gui, Submit, NoHide
IniWrite, %AutoStart%, %IniFile%, Settings, AutoStart
if (AutoStart) {
RegWrite, REG_SZ, %RegKey%, %AppName%, "%A_ScriptFullpath%"
AddLog("已设置开机自启动。")
} else {
RegDelete, %RegKey%, %AppName%
AddLog("已取消开机自启动。")
}
return
BtnSelSrc:
FileSelectFile, selFile, 3, , 选择要备份的源文件, 所有文件 (*.*)
if (selFile != "")
GuiControl,, SourceFile, %selFile%
return
BtnSelTgt:
FileSelectFolder, selFolder, , 3, 选择保存备份的文件夹
if (selFolder != "")
GuiControl,, TargetDir, %selFolder%
return
StartTask:
Gui, Submit, NoHide
if (SourceFile = "" || TargetDir = "") {
AddLog("错误:请先选择源文件和目标文件夹!")
return
}
IniWrite, %SourceFile%, %IniFile%, Settings, SourceFile
IniWrite, %TargetDir%, %IniFile%, Settings, TargetDir
IniWrite, %TimeStr%, %IniFile%, Settings, TimeStr
GuiControl, Disable, BtnStart
GuiControl, Disable, BtnTest
GuiControl, Enable, BtnStop
GuiControl, Disable, BtnSelSrc
GuiControl, Disable, BtnSelTgt
GuiControl, Disable, TimeStr
FormatTime, DisplayTime, %TimeStr%, HH:mm
AddLog("【定时已启动】将在周一至周五 " . DisplayTime . " 执行备份。")
SetTimer, TimerCheck, 1000
return
StopTask:
SetTimer, TimerCheck, Off
GuiControl, Enable, BtnStart
GuiControl, Enable, BtnTest
GuiControl, Disable, BtnStop
GuiControl, Enable, BtnSelSrc
GuiControl, Enable, BtnSelTgt
GuiControl, Enable, TimeStr
AddLog("【定时已停止】")
return
TimerCheck:
Gui, Submit, NoHide
FormatTime, CurrentTime,, HH:mm
FormatTime, CurrentDay,, yyyyMMdd
FormatTime, TargetTime, %TimeStr%, HH:mm
if (CurrentTime == TargetTime && LastRunDay != CurrentDay) {
LastRunDay := CurrentDay
FormatTime, WDay,, WDay
if (WDay == 1 || WDay == 7) {
AddLog("【跳过】今天是周末,不执行备份。")
return
}
AddLog("【时间到】开始执行定时备份任务...")
GoSub, ExecuteTask
}
return
RunNow:
Gui, Submit, NoHide
if (SourceFile = "" || TargetDir = "") {
AddLog("错误:路径不能为空!")
return
}
IniWrite, %SourceFile%, %IniFile%, Settings, SourceFile
IniWrite, %TargetDir%, %IniFile%, Settings, TargetDir
IniWrite, %TimeStr%, %IniFile%, Settings, TimeStr
GoSub, ExecuteTask
return
ExecuteTask:
if (IsRunning)
return
IsRunning := true
GuiControl,, MyProgress, 10
GuiControl,, ProgressText, 状态: 正在处理文件...
if !FileExist(SourceFile) {
AddLog("错误:源文件不存在,请重新选择!")
GoSub, TaskEnd
return
}
SplitPath, SourceFile, , , OutExtension
FormatTime, DateStr,, yyyy'年'M'月'd'日'
NewFileName := "通达信预警" . DateStr . "." . OutExtension
TargetFull := TargetDir . "\" . NewFileName
GuiControl,, MyProgress, 50
FileCopy, %SourceFile%, %TargetFull%, 1
if (ErrorLevel) {
AddLog("错误:复制文件失败,请检查目标文件夹权限!")
GuiControl,, ProgressText, 状态: 复制失败
} else {
AddLog("【任务完成】成功复制到: " . NewFileName)
GuiControl,, MyProgress, 100
GuiControl,, ProgressText, 状态: 备份成功!
}
TaskEnd:
IsRunning := false
GuiControlGet, btnText,, BtnStop
if (btnText != "⏸ 停止定时") {
GuiControl, Enable, BtnTest
GuiControl, Enable, BtnStart
} else {
GuiControl, Enable, BtnTest
GuiControl, Enable, BtnStop
}
return
AddLog(LogText) {
Global LogBox
FormatTime, NowTime,, yyyy-MM-dd HH:mm:ss
GuiControlGet, CurrentLog,, LogBox
NewLog := "[" . NowTime . "] " . LogText . "`r`n" . CurrentLog
GuiControl,, LogBox, %NewLog%
}
GuiSize:
if (ErrorLevel = 1) {
Gui, Hide
}
return
GuiClose:
Gui, Hide
return
RestoreWindow:
Gui, Show
Gui, Restore
return
ExitProgram:
ExitApp
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END








暂无评论内容