如何通过SteamCMD命令行批量更新所有已安装的Steam游戏?
如何通过SteamCMD命令行批量更新所有已安装的Steam游戏?
嘿,这个需求我之前也折腾过,正好可以给你一步步讲清楚怎么实现——核心就是先拿到已安装游戏的AppID,再用SteamCMD批量执行更新命令就行:
第一步:获取已安装游戏的AppID
Steam会把每个已安装游戏的配置信息存在steamapps目录下的.acf文件里,里面就包含了我们需要的AppID。不同系统的获取方法如下:
Windows系统(PowerShell)
- 打开PowerShell,先切换到你的Steam安装目录下的
steamapps文件夹,比如:cd "C:\Program Files (x86)\Steam\steamapps" - 执行下面的命令提取所有AppID:
Get-ChildItem -Filter *.acf | ForEach-Object { (Get-Content $_.FullName | Select-String '"appid"\s+"(\d+)"').Matches.Groups[1].Value }
这条命令会遍历所有.acf文件,精准提取出每个游戏的AppID。
Linux/macOS系统(终端)
- 打开终端,进入Steam的
steamapps目录,比如:
Linux:cd ~/.steam/steam/steamapps
macOS:cd ~/Library/Application\ Support/Steam/steamapps - 用下面的命令提取并去重AppID:
grep -o '"appid" "[0-9]*"' *.acf | awk -F '"' '{print $4}' | sort -u
第二步:用SteamCMD批量更新游戏
拿到AppID之后,我们可以写个脚本循环执行更新命令,不用手动一个个输入:
Windows PowerShell脚本示例
# 先获取所有已安装游戏的AppID $gameIds = Get-ChildItem -Filter *.acf | ForEach-Object { (Get-Content $_.FullName | Select-String '"appid"\s+"(\d+)"').Matches.Groups[1].Value } # 循环更新每个游戏 foreach ($id in $gameIds) { # 替换成你的Steam账号信息,有令牌的话在密码后加令牌代码 steamcmd +login your_username your_password +app_update $id validate +quit }
Linux/macOS Shell脚本示例
#!/bin/bash # 切换到steamapps目录 cd ~/.steam/steam/steamapps # 获取去重后的AppID列表 game_ids=$(grep -o '"appid" "[0-9]*"' *.acf | awk -F '"' '{print $4}' | sort -u) # 循环更新每个游戏 for id in $game_ids; do # 替换成你的Steam账号信息,有令牌的话在密码后加令牌代码 steamcmd +login your_username your_password +app_update $id validate +quit done
一些注意事项
- 账号登录:如果你的账号开启了Steam令牌,登录时需要在密码后面追加令牌验证码(比如
+login myname mypass 123456);也可以先手动运行一次SteamCMD完成登录,后续脚本会自动复用会话,不用重复输密码。 validate参数:这个参数会验证游戏文件的完整性,如果你只是想快速更新,可以去掉它,加快更新速度。- SteamCMD路径:如果系统PATH里没包含SteamCMD,记得用完整路径调用(比如Windows下的
C:\steamcmd\steamcmd.exe)。
备注:内容来源于stack exchange,提问作者TheFibonacciEffect




