备份 Windows 文件,大型文件可以移动到 OneDrive 备份,但类似于代码库,Zotero 数据库这些文件,由于更改频率高,而 OneDrive 又不提供类似于「.gitignore」那样的忽略功能,使用 OneDrive 备份将会产生大量回收站文件,且 OneDrive 无时无刻不在更新。

Git 备份

备份这些文件,可以使用 git,例如[[使用 Git 管理 Hexo 博客目录]]。设置好.gitignore后,定时提交至私有库。

打包备份

脚本

也可以使用打包备份的方法: 脚本如下

$date = Get-Date -Format 'yyyy-M-d'

7z a "$env:OneDrive/Data/Note/Note-$date.zip" "D:/Sync/Note/*"
7z a "$env:OneDrive/Data/Zotero/Zotero-$date.zip" "D:/Zotero/*"
7z a "$env:OneDrive/Data/ProgramFolder/ProtableProgram-$date.zip" "D:/Program/*"
7z a "$env:OneDrive/Data/Blog/Blog-$date.zip" D:/Blog/* -xr!node_modules -xr!public
# 7z a "$env:OneDrive/Data/WindowsPowerShell.zip" "$home/Documents/WindowsPowerShell/*"

7z

7z是 7zip 的命令行版本,只需要 7zip 本体的一个7z.exe(待考证)。常用命令如上所示:7z a [name.zip/7z] [filepath] 是将 filepath 的文件打包为 name.zip,文件类型有写的后缀定义。

第四行命令中使用了忽略参数 -x!r表示递归,一般忽略目录一定要加。

$env:[name] 是调用系统环境变量的办法。

使用日期作为文件名,一方面是为了保留版本。另一方面[[7z如何处理新文件]],我不太了解。似乎如果出现新文件,会保留原来的文件。

设置脚本后台静默运行

为了将离散文件打包备份,编写了一些脚本,让这个脚本后台定时运行,需要借助 Windows 任务计划程序。英文名称为「Task Schedules」。

启动任务的「操作」那里需要使用powershell -command **.ps1 来启动脚本。

为了静默运行,需要勾选「不管用户是否登录都要运行」。勾选后,会要求输入当前账户的密码。

这个解决方法来自QA Stack。帖子还提到可以更改用户为「System」,无法测试成功,猜测为运行路径问题。