改造前:全仓 6/6 个源文件在 5.1 上解析失败(README 却承诺支持 5.1)。原因是文件是无 BOM 的 UTF-8,而 5.1 没有 BOM 就按 ANSI 代码页解码源码,中文变乱码、全角问号吃掉引号,整块语法塌掉。 现在 28/28 个文件在 5.1 与 7 上都解析零错误,E2E 36 项在 5.1 上全绿。 顺带修掉一个被 5.1 掩盖的缺陷:带 [CmdletBinding()] 的脚本在 5.1 上,param() 默认值里 拿不到 $PSScriptRoot(实测为空串,7 上正常)。于是 Backup.ps1 / Restore.ps1 在 5.1 上不传 路径参数就报错退出 —— 而计划任务恰恰不传。E2E 之所以看不见,是因为它总是显式传路径。 8 处默认值全部移到 param() 之后的解析段,沿用本仓库对 -BackupDir 一直在用的写法。 新增三条可重放的约定,让编码不再是一次性动作: .gitattributes 接管行尾(本机 core.autocrlf=true,会把工作区改成 CRLF 制造伪 diff) .editorconfig 用 charset = utf-8-bom 锁住 BOM tools\Set-SourceEncoding.ps1 是规范化脚本,tools\Invoke-* 之外的任何改动之后都能重放 test.ps1 是唯一验收入口:Encode + Parse + Unit + Smoke + E2E,在 7 与 5.1 上各跑一遍 test.ps1 的 Encode 层直接检查"必须有 BOM"这条规则。加它的原因很实际:实测本仓库用的 编辑工具在保存时会悄悄去掉 BOM,而丢了 BOM 的文件只在 5.1 上出错、在 7 上完全正常, 没有这条检查就会一直漏过去。 已知未修(下一步处理):5.1 上 Unit 有 6 项、Smoke 有 1 项失败,全部源于测试夹具写 临时文件时没指定编码(5.1 的 Set-Content 默认 ANSI),与产品代码无关。
120 lines
4.8 KiB
Plaintext
120 lines
4.8 KiB
Plaintext
###########
|
||
# BackupList.txt —— 备份清单
|
||
###########
|
||
#
|
||
# 语法:
|
||
# [+|-] <目标> [修饰符...] [# 说明]
|
||
#
|
||
# 标记:
|
||
# + 仅备份,不恢复。
|
||
# - 仅恢复,不备份。
|
||
#
|
||
# 目标(二选一):
|
||
# <SoftwareName> 软件名。查 SoftwareCatalog.psd1,归档名 = 软件名。
|
||
# <Absolute\Path> 绝对路径。含 `\`、`/` 或 `%` 时按路径处理。
|
||
#
|
||
# 修饰符(可多个,前后必须有空格):
|
||
# :: <Absolute\Path> 覆盖 Path。同 `@ Path='<Absolute\Path>'`。
|
||
# 同一行中,:- / :+ 的模式相对覆盖后的 Path。
|
||
# :- <模式>[,...] 排除。同 `@ Exclude='<模式>'`。
|
||
# :+ <模式>[,...] 追加。同 `@ Include='<模式>'`。
|
||
# 模式为两段式:<归档内相对路径>:<宿主机绝对路径>。
|
||
# :encrypt 加密。同 `@ Encrypt='$true'`。
|
||
# :!encrypt 不加密。同 `@ Encrypt='$false'`。
|
||
# @ <Key>='<Value>' 覆盖 SoftwareCatalog 中的默认字段。
|
||
#
|
||
# 说明:
|
||
# 行尾 `# 说明` 会在运行时与目录介绍一起打印。
|
||
# 归档名 = 软件名,同一软件不要写两遍。
|
||
#
|
||
# ---------------------------------------------------------------- #
|
||
# 模式(Pattern)
|
||
# ---------------------------------------------------------------- #
|
||
#
|
||
# 「模式」是传给 7z 的排除 / 包含匹配式,匹配的是**归档内的相对路径**,
|
||
# 不是宿主机上的绝对路径。
|
||
#
|
||
# 例:Edge 的 Path 是 `%LocalAppData%\Microsoft\Edge\User Data`,
|
||
# 归档根就是 `User Data\` 内部的内容。
|
||
# 模式 `Default\Extensions` 匹配的是归档内的
|
||
# `Default\Extensions\...`,
|
||
# 而不是宿主机上的 `C:\Users\...\Edge\User Data\Default\Extensions\...`。
|
||
#
|
||
# 两种形态:
|
||
#
|
||
# <模式> 锚定在归档根。展开为 7z 的 `-x!<Path 的目录名>\<模式>`。
|
||
# 只匹配根下这一份。
|
||
#
|
||
# !<模式> 任意层级。展开为 7z 的 `-xr!<模式>`。
|
||
# 只要路径中任意一段命中,就排除。
|
||
#
|
||
# 多数情况应使用 `!` 形式:根锚定常常够不着嵌套层级里的目标。
|
||
# 例:Edge 的 `OneAuth\WebView2\EBWebView\` 里还有一整套
|
||
# Crashpad / BrowserMetrics / ProvenanceData / optimization_guide,
|
||
# 根锚定模式碰不到,必须用 `!` 形式按组件名排除。
|
||
#
|
||
# 通配符(7z 语法,非正则):
|
||
#
|
||
# * 任意多个字符(不含 `\`)。
|
||
# ? 任意单个字符。
|
||
#
|
||
# 不支持:正则、[] 字符类、{} 花括号扩展。
|
||
#
|
||
# `!*Cache` 一次覆盖:Cache / Code Cache / GPUCache / DawnCache /
|
||
# GrShaderCache 等一批以 Cache 结尾的组件名。
|
||
#
|
||
# 引号与空格:
|
||
#
|
||
# 模式里**不要自己写引号**,引号会被当成模式的一部分。
|
||
# 模式里的空格会被自动转成 `?`(7z 的 -x! 参数不接受带空格的模式)。
|
||
# 例:`Default\Service Worker` 会变成 `Default\Service?Worker`。
|
||
#
|
||
# 多个模式:
|
||
#
|
||
# 用 `,` 或 `;` 分隔,等价于给 7z 传多个 -x! / -xr! 参数。
|
||
#
|
||
# :+ 的两段式:
|
||
#
|
||
# <归档内相对路径>:<宿主机绝对路径>
|
||
# 把宿主机的目录追加到归档内的指定位置。
|
||
# 例:`D:\extra\ps-modules:Modules` → 把 D:\extra\ps-modules
|
||
# 追加到归档内 `Modules\` 位置。
|
||
#
|
||
# ---------------------------------------------------------------- #
|
||
|
||
# ---- 软件名 ----
|
||
|
||
+ AutoDarkMode # 备份文件还在,但目前不再使用
|
||
+MicrosoftEdge
|
||
+FastNodeManager
|
||
+INZONEHub
|
||
+Kazumi
|
||
+Legendary @ Exclude='DefaultConfig\tmp' # 忽略临时文件夹
|
||
+Mnemon
|
||
+OpenCode
|
||
+OpenSSH
|
||
+PiliPlus
|
||
+PowerShell @ Encrypt='$false' # 目前无敏感文件,无需加密
|
||
+PowerToys
|
||
Scoop :- GlobalPersist\steam\steamapps # 忽略 Steam 安装的软件,可重下载
|
||
+Startup
|
||
+SteamRomManager
|
||
+TranslucentTB
|
||
+ TwinkleTray # 备份文件还在,但目前不再使用
|
||
+WindowsPowerShell :!encrypt # 目前无敏感文件,无需加密
|
||
+WindowsTerminal
|
||
|
||
# ---- 自定义目录 ----
|
||
|
||
+ C:\Programs\BaiduNetdisk
|
||
+C:\Programs\FooColor
|
||
+C:\Programs\March7thAssistant :- '3rdparty\WebBrowser\UserProfile\Integrated,March7thAssistant\logs\' # 内置浏览器的缓存与日志,可再生
|
||
+C:\Programs\MiFlash
|
||
+C:\Programs\MiFlash_Unlock
|
||
+C:\Programs\QuarkCloudDrive
|
||
+C:\Programs\ScoopApps\persist :- 'persist\ariang-native\UserData\DawnCache,persist\ariang-native\UserData\GPUCache,persist\ariang-native\UserData\Local Storage,persist\ariang-native\UserData\Session Storage' # ariang 的缓存/会话数据,可再生
|
||
|
||
+D:\UserData\Documents\Aria
|
||
- D:\UserData\Documents\CodeSpace :- 'Shuery-Shuai\ImmortalWrt-BPI-R4-Firmware\immortalwrt' # 仅在必要时备份
|
||
-D:\Workspace # 仅在必要时备份
|