以前一直使用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"
}
} |