文件自动复制脚本ahk源码

#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
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容