XGP存档提取工具3分钟速通:如何把Xbox Game Pass存档快速完整备份出来
【免费下载链接】XGP-save-extractorPython script to extract savefiles out of Xbox Game Pass for PC games项目地址: https://gitcode.com/gh_mirrors/xg/XGP-save-extractor
XGP存档提取工具(XGP-save-extractor)是一款免费开源的 Python 小工具,专门解决 Xbox Game Pass for PC 玩家最头疼的问题:游戏装了一堆,存档却藏在系统深处找不到、复制不出来。运行一条命令,它就能把本机已安装游戏的 XGP 存档自动导出成标准 ZIP,既方便定期备份,也能直接迁移到 Steam 或 Epic 版本继续玩。
翻遍电脑也找不到存档?说的就是你
你玩《幻兽帕鲁》已经 200 多个小时,基地盖了几层楼,稀有帕鲁抓了一整个图鉴。朋友都转去了 Steam 服,你想带着进度过去,于是打开文件资源管理器,开始了长达二十分钟的"寻宝":游戏目录里翻了个底朝天,全是一串串9d7f0a2b-...这样的乱码文件夹名;网上搜到的存档路径又深又绕,照着走还找不到对应的文件夹。
这一刻你是不是已经在想:几百小时的进度,难道要重头再来?
别慌。这不是你的问题,是 Xbox Game Pass 的存档机制本身就反人类。Steam 把存档规规矩矩放在用户文件夹里,XGP 却把存档塞进了一个名为%LOCALAPPDATA%\Packages的"神秘仓库"——每款游戏对应一个以"包名"命名的文件夹,存档再层层嵌套进SystemAppData\wgs的容器里,文件全部用 GUID 随机编号,连索引都是二进制写的。普通人打开这个目录,跟看天书没区别。
而XGP存档提取工具,就是为这个场景而生。
XGP存档提取工具原理:一个命令替你拆箱、翻译、打包
一句话讲透:它钻进%LOCALAPPDATA%\Packages,把 XGP 藏在 GUID 乱码背后的存档逐个读出来,按每款游戏预先定好的"翻译规则"还原成 Steam/Epic 认识的文件名,最后压缩成一个 ZIP 交到你手上。
你可以把整个流程想象成快递分拣:
- XGP 的每个存档都是一个套娃盲盒:外层是游戏包名文件夹,中层是装数据的"容器"(container),最里面的文件连名字都是乱码;
- 工具先扫描你装了哪些游戏(对照一份内置清单
games.json),然后挨个拆箱; - 拆开后,它靠一本"翻译词典"把乱码文件名翻译回人话;
- 最后按"游戏名_玩家代号_时间戳"打包成 ZIP,发货给你。
关键就在那本"翻译词典"里。games.json为每款游戏记录了一条"处理方案"(源码里叫 handler),常见的有这几种:
| 方案代号 | 含义 | 适用例子 |
|---|---|---|
1c1f | 一个容器就是一个文件,直接改名即可 | 《原子之心》《P5R》之外的多数单存档游戏 |
1cnf | 一个容器装所有文件,逐个改名导出 | 《Hades》《八方旅人》 |
palworld | 把文件名里的-当作目录分隔符还原 | 《幻兽帕鲁》 |
starfield | 把拆散成多块的 SFS 文件重新拼装 | 《星空》 |
forza | 容器名 + 文件名拼接成完整文件名 | 《Forza Horizon 5》 |
以《幻兽帕鲁》为例,它的翻译规则在源码里只有短短三行:
fname = container["name"] # 取出容器名,比如一串用短横线连接的路径 fname = fname.replace("-", "/") # XGP 用 "-" 当分隔符,替换成真正的文件夹斜杠 "/" fname += ".sav" # 补上 Steam 版认识的 .sav 扩展名翻译过来就是:把存档名里的每个短横线当一层文件夹,再补个.sav后缀。就这么朴素的规则,配合《星空》那种"把拆散的文件块重新拼装成 SFS"的复杂方案,games.json里已经积累了 40 多款主流游戏。这正是它跟"手动复制"最大的区别——每款游戏都有专属的还原方案,你只管跑,剩下的它来。
三个新手最想先问的问题
它能干什么:一键导出 XGP 存档成标准 ZIP
运行后它会自动完成四件事:扫描已安装的受支持游戏 →按账号区分存档 →还原成 Steam/Epic 版认识的文件名 →生成游戏名_玩家代号_时间戳.zip。
举个例子,你会得到一个类似palworld_PlayerOne_2026-08-19_12_30_00.zip的文件,打开后里面的目录结构就是 Steam 版直接能认出的样子。手动翻目录和用工具的差距,看这张表就清楚了:
| 对比项 | 手动翻目录 | 用 XGP存档提取工具 |
|---|---|---|
| 找存档位置 | 路径极深,靠运气 | 自动扫描已装游戏 |
| 认文件名 | 全是 GUID 乱码 | 自动还原成真实文件名 |
| 区分账号 | 容易拿错 | 自动识别 Xbox 玩家代号 |
| 输出结果 | 一堆无规则文件 | 一个标准 ZIP |
| 上手难度 | 需要专业知识 | 一条命令 |
它怎么做到的:一本"游戏翻译词典"逐款拆解
核心其实就两个文件:main.py(干活的脚本)和games.json(翻译词典)。脚本读取词典后,按每款游戏配置的 handler 执行不同的拆解逻辑。除了上面表格里的规则,还有几个值得一提:
- 《星空》:Steam 版存档是单个
.sfs文件,XGP 版却把文件拆成"头部 + 多块数据"散装存放。脚本会按顺序把碎片重新拼装回完整存档,并自动处理补齐字节的"padding"填充。 - 《Control》:XGP 版文件缺
.chunk后缀,脚本会逐个补上,还会生成 Steam/Epic 版需要的容器显示名文件。 - 多账号:如果一台电脑有多个 Xbox 账号玩同一款游戏,脚本会读取
XboxLiveGamer.xml里的玩家代号,给每个账号单独打包,互不混淆。
它安全吗:全程只读,不碰你的原始存档
安全。脚本从头到尾只做两件事:读取XGP 存档目录、写出新的 ZIP 文件。它不修改、不删除、不移动任何原始数据——就算你反复运行,原始存档也原封不动。
唯一要留意两点:一是如果你用的是打包好的单文件版(PyInstaller 制作),个别杀毒软件可能误报,这是打包工具常见的"误伤",介意的话直接用 Python 运行源码即可;二是Xbox 云存档同步需要时间,如果读取时同步还没完成,导出的文件可能不完整,脚本检测到异常会明确警告你"同步可能未完成",这时等几分钟再跑一次就好。
XGP存档提取工具怎么用:装、跑、验三步搞定
第一步:装环境
电脑上装好Python 3.10 或更高版本,安装时记得勾选"Add Python to PATH"(否则命令行会找不到 python 命令)。然后打开命令行,把项目克隆到本地:
git clone https://gitcode.com/gh_mirrors/xg/XGP-save-extractor预期结果:命令行里输入python --version能显示版本号,克隆出的文件夹里有main.py和games.json两个关键文件。
可能出错:提示python不是内部或外部命令,说明安装时没勾选 PATH,重装一次即可。
第二步:跑脚本
进入项目文件夹,执行:
python main.py预期结果:屏幕上先出现Installed supported games:,下面列出你装了的受支持游戏(比如- Palworld);每个游戏下方会打印属于哪个玩家的存档文件清单,最后出现类似Save files written to "palworld_PlayerOne_2026-08-19_12_30_00.zip"的提示。
可能出错:
- 出现
No supported games installed,说明你装着的游戏都不在支持名单里,或者游戏没通过 Xbox 应用安装; - 出现"Xbox cloud save syncing might not be complete"的警告,先按回车跳过,等几分钟再重跑。
注意脚本结束时会停在Press enter to quit,按一下回车即可退出。
第三步:验证结果
回到文件夹,找到刚生成的 ZIP。打开它检查两件事:一是文件名是不是人话(.sav、.sfs这类真实扩展名,而不是 GUID 乱码);二是目录结构是否符合游戏预期。
确认没问题后,去 PCGamingWiki 这类网站查一下该游戏 Steam/Epic 版的存档目录位置,把 ZIP 里的文件原样放进去,进度就接上了。如果发现里面还是乱码,多半是云同步没完成,重跑一次。
新手避坑清单:6 个坑一次讲完
| 坑 | 现象 | 解法 |
|---|---|---|
| 云存档没同步完 | 导出文件不完整或损坏,脚本主动警告 | 等几分钟,重跑一次 |
| 杀毒软件误报 | 单文件 exe 版被标记为病毒 | 直接用python main.py跑源码 |
| 游戏不在支持名单 | 提示No supported games installed | 查看games.json确认名单,别硬扛 |
| 游戏本身不兼容 | 存档格式与 Steam/Epic 版差异过大 | 名单外游戏可向项目提交请求,但仍可能无解 |
| 一台电脑多个账号 | 担心存档混在一起 | 不用怕,脚本会按玩家代号分别生成 ZIP |
| 脚本卡在"等待回车" | 看起来像没反应 | 这是正常交互,按回车继续 |
另外提一句:项目官方明确标注了一批"不兼容"游戏,比如《瘟疫传说:安魂曲》《ARK:生存飞升》《P3R》《Forza Horizon 4》等——这些游戏的 XGP 存档格式和 Steam/Epic 版本差异太大,无法简单转换。开跑之前先瞄一眼名单,能省下很多冤枉时间。
高频问题快问快答
为什么打开 ZIP 里面还是 GUID 乱码?大概率是 Xbox 云同步还没完成,脚本读到了半成品文件。等几分钟再跑一次,一般就好了。
我的游戏在支持名单里吗?打开项目里的games.json就能看到完整名单,目前覆盖 40 多款,包括《幻兽帕鲁》《星空》《Forza Horizon 5》《女神异闻录5皇家版》《Hades》《Lies of P》《Control》《Hi-Fi RUSH》《Manor Lords》《Sea of Stars》《最终幻想15》《如龙0》等主流作品。
提取之后我的原始存档会变吗?不会。脚本只读取、只打包,不写回、不删除任何原始数据,可以放心反复运行。
一台电脑多个账号玩同一款游戏怎么办?脚本会读取 Xbox 应用里的玩家代号,为每个账号单独生成一个 ZIP,文件名里就带着代号,谁是谁一目了然。
我想支持名单外的游戏,能自己加吗?可以。games.json是纯文本清单,参照现有条目加上"包名 + 处理方案"就能试;但不同游戏的存档组织方式差异很大,最好的做法是把游戏名和存档结构反馈给项目维护者,让懂行的人写规则。
备份出来的文件到底放哪?放到该游戏 Steam/Epic 版本的存档目录。具体路径因游戏而异,用 PCGamingWiki 按游戏名一查便知,放对位置后启动游戏即可读取。
给进度上把锁,下次打开游戏只剩快乐
你不需要理解 wgs 容器、GUID、UTF-16 编码是什么——只需要知道:下次重装系统、换平台、或是跟朋友去另一个平台重聚之前,花三分钟跑一次这个工具,几小时的心血就多了一份"保险"。等哪天系统崩溃、存档消失的那一刻,你会无比庆幸今天按下回车键的自己。
【免费下载链接】XGP-save-extractorPython script to extract savefiles out of Xbox Game Pass for PC games项目地址: https://gitcode.com/gh_mirrors/xg/XGP-save-extractor
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考