吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1455|回复: 2
收起左侧

[其他原创] AutoHotkey通用备份还原脚本

[复制链接]
ZakaryTime 发表于 2024-4-8 17:56
以前一直使用SyncbackPro备份还原Everything,Listary等软件的配置文件。
存在以下缺点,就考虑自己写一个脚本来进行备份还原。
  • SyncbackPro作为专业软件功能强大,但是随之而来的就是配置麻烦,打开运行缓慢;
  • SyncbackPro会比较文件的修改日期,修改日期较新的不会覆盖旧的,这个设计在备份还原很多文件的时候都是正确的。但是Listary等程序对配置文件的修改是实时的,在还原的时候就不会将你想要还原的配置文件还原。
脚本分享如下:
[Python] 纯文本查看 复制代码
#Requires AutoHotkey v2.0 
/*
脚本会自动判断路径是文件还是文件夹,
文件夹会复制覆盖目录下的所有文件,
文件则直接复制覆盖。
脚本没有进行文件比较,不适用于大规模、大文件的备份还原,
如果有需要推荐使用SyncbackPro等专业软件进行,
仅适合软件的配置及数据文件进行备份。
脚本支持备份还原双模式,
需要使用备份模式,运行时需要加入命令行参数 "backup"
需要使用还原模式,运行时需要加入命令行参数 "restore"
*/

source := "C:\Program Files\Everything" ;源文件路径
target := "D:\Settings\EveryThing设置" ;备份目标路径
porcessPath := "" ;目标程序的路径,如果该配置不为空,则在备份还原以前会关闭目标进程,完成后再运行
list :=["\Everything.ico", ;需要备份还原的文件列表,相当于备份软件中的过滤器/筛选列表。PS:不要忘记前面的\
"\Everything.ini",
"\Filters.csv",
"\IbEverythingExt",
"\WindowsCodecs.dll"
]

/*
以下为脚本的主要逻辑,一般情况下不需要修改
*/
; 备份模式
if(A_Args[1] = "backup"){
    backMode()
}
else if(A_Args[1] = "restore"){
    restoreMode()
}
else{
    MsgBox("输入的命令行参数错误,请检查。")
}

; 备份模式
backMode(){
    ; 关闭指定进程
    if(porcessPath != ""){
        pathArray := SubStr(porcessPath,"\")
        ProcessClose(pathArray[-1])
        Sleep(3000)
    }

    for index,element in list {
        sourcePath := source . element
        targetPath := target . element
        if( isFileOrFolder(sourcePath) = "folder"){
            DirCopy(sourcePath,targetPath,1)
        }
        else{
            FileCopy(sourcePath,targetPath,1)
        }
        Sleep(100)
    }

    ; 运行指定程序
    if(porcessPath != ""){
        Run(porcessPath)
    }
}

; 还原模式
restoreMode(){
    ; 关闭指定进程
    if(porcessPath != ""){
        pathArray := SubStr(porcessPath,"\")
        ProcessClose(pathArray[-1])
        Sleep(3000)
    }

    for index,element in list {
        sourcePath := source . element
        targetPath := target . element
        if( isFileOrFolder(sourcePath) = "folder"){
            DirCopy(targetPath,sourcePath,1)
        }
        else{
            FileCopy(targetPath,sourcePath,1)
        }
        Sleep(100)
    }

    ; 运行指定程序
    if(porcessPath != ""){
        Run(porcessPath)
    }
}

; 判断路径是目录还是文件
isFileOrFolder(path){
  pathAttr := FileExist(path)
  if(pathAttr == ""){
    MsgBox(path . "路径不存在")
  }
  else if(InStr(pathAttr,"D")){
    return "folder"
  }
  else {
    return "file"
  }
}

免费评分

参与人数 2吾爱币 +6 热心值 +2 收起 理由
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
qubonn + 1 + 1 感恩共享原创好工具!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

alongzhenggang 发表于 2024-4-8 23:37
虽然  暂时  用不上  感谢感谢
jsline 发表于 2024-4-9 11:11
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-13 00:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表