基于 之前一个大佬的工作,编写了一个小工具用于批量整理 Steam 的未压缩截图副本。
GitHub 仓库:https://github.com/ihainan/Steam-Screenshots-Organizer
脚本的运行效果:
整理前:
整理后:
下载 screenshot-org.bat 和 screenshot-org.ps1 放到 Steam 截图副本目录下。
当需要整理截图的时候运行 screenshot-org.bat 文件,运行结束之后截图就会被移动到对应游戏名字的目录下面,如果有非 Steam 游戏的截图则会被放到 “Uncategorized Screenshots” 目录中。
Steam 的截图副本命名格式类似于:1332010_20240526130334_1.png,其中 1332010 是游戏 ID。
Steam 本身提供了一个 API https://api.steampowered.com/ISteamApps/GetAppList/v2/ 能够获取商店中所有游戏的列表,包含游戏的 ID 和对应的名字。
脚本会将 API 的返回转换为一张表,根据截图名字的游戏 ID 检索得到游戏名,创建目录并将截图移动到该目录下面。
Steam 提供的 API 在大陆地区访问非常慢,所以 我自己搭建了一个反代,在我自己的测试环境下速度提升非常明显。脚本默认使用了我这个反代,如果你想修改回 Steam 自己的接口,或者我的接口失效了,可以将脚本如下代码行:
$apiUrl = "https://steam.ihainan.me/ISteamApps/GetAppList/v2/" # ihainan 反代的官方 API,用于提升在大陆地区的下载速度
# $apiUrl = "https://api.steampowered.com/ISteamApps/GetAppList/v2/" # Steam 官方 API 地址
修改成:
# $apiUrl = "https://steam.ihainan.me/ISteamApps/GetAppList/v2/" # ihainan 反代的官方 API,用于提升在大陆地区的下载速度
$apiUrl = "https://api.steampowered.com/ISteamApps/GetAppList/v2/" # Steam 官方 API 地址
只有在第一次使用脚本,或者截图对应游戏的 ID 不在本地缓存(app.json 文件)中时(可能是比较新的游戏),脚本才会调用 Steam API 获取完整的 App List(大约 80MB),从而提高平日运行的速度。
脚本在创建游戏目录之前会检查和过滤目录名不允许的无效字符。我测试过 Steam 数据库中的所有游戏,对于一些特殊名字的游戏做了处理以保证能够正常创建游戏目录。比如 这个游戏 API 返回的游戏名是 <|>,删除无效字符之后就剩下空串了,我就使用游戏 ID 做为目录名。
支持新的 AVIF 文件。后续如果 Steam 还支持新的文件格式,可以自行修改如下代码行:
$fileExtensions = @("*.png", "*.avif") # 将会被整理的文件类型
理论上经过处理后的游戏名,会有重名的可能,但是概率很小,起码目前测试所有的游戏处理之后都是不重名的,以后有问题了再说。
此外,Steam API 不知道为什么偶尔返回的 app 列表里面是缺失某些游戏的,如果我的脚本自动更新本地缓存之后还出现游戏被错误归类的问题,建议删除 app.json 重新运行。