通过命令行检查 Steam 游戏是否需要更新

通过命令行检查 Steam 游戏是否需要更新

我的 Windows 机器上有一个运行 Steam 游戏的专用服务器,我想让它保持最新状态。

我想定期检查是否有可用的更新,如果有,则安装它,通知用户服务器正在重新启动,然后重新启动服务器。

问题是,我不知道该怎么做检查是否有可用更新

有一个名为 SteamCMD 的命令行实用程序,但不清楚如何使用它来检查服务器是否需要更新 - 它似乎只能告诉某些东西要更新,而不能检查是否需要更新。

我如何通过命令行完成这两件事?

  • 检查 Steam 应用是否需要更新, 或者
  • 更新 Steam 应用,然后知道是否发生了更新

答案1

这个批处理脚本对我来说效果很好。它使用 curl 查询服务器以查明版本是否发生变化,并使用 steamapp 安装新版本。如果有新的测试版或其他东西,这将过于热心地进行安装,但我并不关心我的目的 - 如果需要,可以做更多的事情来提取所需的精确版本 ID。

它需要传递 AppID(可从 Steam 中的游戏属性、右键单击菜单中获得)以及安装目录。

调用该脚本时,如果需要更新则返回 1,如果不需要更新则返回 0,如果出现错误则返回 -1。它要求 steamapp/steamapp.exe 相对于批处理脚本存在。

@ECHO OFF
SETLOCAL EnableDelayedExpansion

SET RETVALUE=-1

IF "%1"=="" (
    ECHO ERROR: Please provide Steam App ID as first parameter
    GOTO END
)

IF "%2"=="" (
    ECHO ERROR: Please provide app directory as second parameter - likely within steamapps\common
    GOTO END
)

SET APP_INSTALL_DIR=%2\

IF NOT EXIST !APP_INSTALL_DIR! (
    ECHO ERROR: Install directory not found: !APP_INSTALL_DIR! 
    GOTO END
)

SET STEAMCMD=%~dp0\steamcmd\steamcmd.exe

IF NOT EXIST !STEAMCMD! (
    ECHO Expected: steamcmd located in !STEAMCMD!
    GOTO END
)

SET APPID=%1
SET APPINFO_DIR=%~dp0\appinfo
SET APPINFO_FILE=!APPINFO_DIR!\!APPID!
SET APPINFO_FILE_NEW=!APPINFO_FILE!-new

IF NOT EXIST !APPINFO_DIR!\ MKDIR !APPINFO_DIR!

ECHO Checking for needed updates for game id !APPID!

CALL curl https://api.steamcmd.net/v1/info/!APPID! --silent --output !APPINFO_FILE_NEW!
IF !ERRORLEVEL! NEQ 0 (
    ECHO Error getting app info for game
    GOTO END
)

SET NEEDS_UPDATE=1
IF EXIST !APPINFO_FILE! (
    CALL FC !APPINFO_FILE! !APPINFO_FILE_NEW! > NUL
    IF !ERRORLEVEL! EQU 0 SET NEEDS_UPDATE=0
)

IF !NEEDS_UPDATE! NEQ 0 (
    ECHO Update required, installing to !APP_INSTALL_DIR!
    CALL !STEAMCMD! +force_install_dir !APP_INSTALL_DIR! +login anonymous +app_update !APPID! validate +quit 
    IF !ERRORLEVEL! NEQ 0 (
        ECHO Error updating app via steamcmd
        GOTO END
    )
    
    MOVE !APPINFO_FILE_NEW! !APPINFO_FILE! > NUL

    ECHO Version out-of-date, returning 1
    SET RETVALUE=1
    GOTO END
) ELSE (
    ECHO Version up-to-date, returning 0
    DEL !APPINFO_FILE_NEW!
    SET RETVALUE=0
    GOTO END
)

:END

EXIT /B !RETVALUE!

我可以在单独的批处理脚本中使用它,定期运行,检查是否有新的更新,如果有,则倒计时并执行重新启动。

相关内容