用 PowerShell 写「一键备份工作区」脚本:增量 + 排除规则 + 日志
为什么不用复制粘贴
工作区里真正值钱的只有源码、配置和文档,但直接把整个目录拖到移动硬盘,会把 node_modules、构建产物、浏览器缓存一起搬走。一次几十 GB,速度慢,还塞满备份盘。手写一个几十行的 PowerShell 脚本,就能把「备份」变成一条命令:只拷变化的文件、跳过真正的垃圾、每次留一份日志。
第一步:先定「备份谁、备份到哪」
把路径写成脚本顶部的参数,而不是散落在代码里。建议用 PARAM 块声明源目录、目标目录、日志目录三个变量,并加上默认值。备份根目录最好带上日期子目录,例如 backup\2026-10-30,这样天然形成多份快照,恢复时按日期挑即可,不需要任何版本管理工具。
第二步:用哈希比对实现增量
增量判断有三种做法:比时间、比大小、比哈希。比时间最快但不可靠,文件被 touch 一下就会误判;比大小便宜,但内容改短或等长会被漏掉。用 Get-FileHash 对源文件与目标文件做 SHA256 比对最稳,代价是每次要多读一遍文件。折中方案是先用「大小 + 修改时间」做粗筛,只有两者都不一致时再算哈希,既快又准。
第三步:把排除规则做成清单
不要在主循环里写一串 IF 判断,把要跳过的目录名放进数组:node_modules、.git、dist、build、bin、obj、.venv、__pycache__,再加上常见缓存目录和临时文件后缀(.tmp、.log、.bak)。遍历时用 Get-ChildItem -Recurse 拿到全部文件,再用 -notlike 或正则过滤掉路径中包含这些目录名的项。清单独立成数组的好处是以后加一条就行,不用动逻辑。
第四步:写日志,让失败可追溯
每次运行追加一行记录:时间、模式、文件数、字节数、耗时。用 Add-Content 写 TSV 或 Markdown 表格,方便事后用 Excel 打开。更关键的是把单个文件的拷贝放进 TRY/CATCH:某个文件被占用时只记一条 WARN 并继续,而不是让整次备份中断。最后统计「成功 / 跳过 / 失败」三个计数,退出码非零表示有失败,这样才能被计划任务感知。
第五步:接入计划任务与验证
用 Register-ScheduledTask 注册每天一次的触发器,运行账户选当前用户、勾选「无论用户是否登录都运行」更可靠。上线前必须做两次验证:第一次全量跑,看目标目录文件数与源一致;第二次不改任何文件再跑一遍,日志里「复制」应该是 0,这就证明增量逻辑生效。恢复演练同样重要:从备份目录随便挑一个文件还原,确认能覆盖到正确位置,备份才算真正可用。
- 点赞
- 收藏
- 关注作者
评论(0)