用 PowerShell 写「一键备份工作区」脚本:增量 + 排除规则 + 日志

举报
yd_224001237 发表于 2026/10/30 08:02:37 2026/10/30
【摘要】 用 PowerShell 做工作区一键备份:哈希比对实现增量、按排除清单跳过 node_modules 与缓存、每次结果写日志,并给出计划任务接入与验证方法。

为什么不用复制粘贴

工作区里真正值钱的只有源码、配置和文档,但直接把整个目录拖到移动硬盘,会把 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,这就证明增量逻辑生效。恢复演练同样重要:从备份目录随便挑一个文件还原,确认能覆盖到正确位置,备份才算真正可用。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。