xxhk.org

学习骇客

一键备份:调用 7ZIP 进行加密,然后备份到目标文件夹

2024 / 9 / 24

近期梳理了百度网盘同步盘里过去几年的自动备份,这让我意识到自动备份的一个很大麻烦 —— 数据冗余。

以前我都是把自动备份的 .bat 文件放在电脑的“启动”文件夹里,每次开机就会执行一次,帮我把重要文件备份到同步盘里,以日期命名并保存。这样的自动备份虽然方便,但是也会在不需要备份的时候进行多余的备份,比如有个文件夹我可能一周都没打开过,而它却给我备份了十几次。之前也尝试过把文件放在同步盘里编辑,但是经常遇到权限问题,又或者是程序文件被当成威胁给删除了。

现在我决定用“手动+自动”的形式,或者是“手动”的形式。

在资源管理器里按下 Ctrl+L,定位到地址栏,然后输入“PowerShell”,在当前文件夹里打开终端(Windows 11 自带),输入以下命令即可将当前文件夹里的内容打包、加密并以日期命名,然后备份到指定的位置。

$currentFolderName = Split-Path -Path (Get-Location) -Leaf; $timestamp = Get-Date -Format "yyyyMMddHHmmss"; $archiveName = "${currentFolderName}_${timestamp}.7z"; $destinationPath = "D:\inbox\$archiveName"; $7zipPath = "C:\Program Files\7-Zip\7z.exe"; & $7zipPath a -t7z -mhe=on -p"123456789" $destinationPath ".\*"; if ($LASTEXITCODE -eq 0) { Write-Host "压缩加密完成。文件保存在: $destinationPath"; Stop-Process -Id $PID } else { Write-Host "压缩加密过程中发生错误。" }

把这个命令写到微信输入法的常用语里便可一键输入。如果利用一些宏工具,例如罗技的可编程键盘、Windows 平台的 Quicker 或 AHK 等工具,可以将以上操作变成一个键。例如,按一下 F12 即可完成全部动作。

当我更新了某个项目文件,那么就可以在当前文件夹里进行上述处理。

因为是调用了 7zip命令行版 的高级加密功能,所以文件名和文件目录都不可见,即使保存到同步盘里也不会再被系统误删了。

以下是展开版本,方便分析后使用,大家在使用时请修改上方一行版本后为己所用。

# 获取当前文件夹名称 $currentFolderName = Split-Path -Path (Get-Location) -Leaf # 生成时间戳 $timestamp = Get-Date -Format "yyyyMMddHHmmss" # 组合压缩包名称 $archiveName = "${currentFolderName}_${timestamp}.7z" # 设置目标路径(课自定义路径即“D:\inbox”部分) $destinationPath = "D:\inbox\$archiveName" # 设置7-Zip可执行文件的路径(请确保安装了7-Zip并正确填写了路径) $7zipPath = "C:\Program Files\7-Zip\7z.exe" # 执行7-Zip命令进行加密压缩(密码可自定义即“123456789”部分) & $7zipPath a -t7z -mhe=on -p"123456789" $destinationPath ".\*" # 如果成功,输出消息并自动关闭PowerShell窗口 if ($LASTEXITCODE -eq 0) { Write-Host "压缩加密完成。文件保存在: $destinationPath" Stop-Process -Id $PID } else { Write-Host "压缩加密过程中发生错误。" }

请先进行压缩测试和解压缩测试后再使用,加密仅仅是为了防网盘读取,所以不用复杂到连自己都记不住的程度。

由于涉及到高强度加密的过程,所以不太适用于大型文件(方案见其他文章)。