Files
BakNRet/BackupList.txt
Shuery 2d26f78d15 fix: 源文件改存 UTF-8 with BOM,让 Windows PowerShell 5.1 真正可用
改造前:全仓 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),与产品代码无关。
2026-09-26 22:05:42 +08:00

120 lines
4.8 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
###########
# 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 # 仅在必要时备份