You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批处理过滤loginusers.txt提取MostRecent为1的用户ID

批处理过滤Steam登录用户文件方案

需求说明

我需要用批处理过滤loginusers.txt文件:如果文件中某个{ }块内存在"MostRecent" "1",就提取该块外的"76561199048621574"这类SteamID字符串,去掉引号后赋值给变量;如果"MostRecent"为"0",则忽略对应的整个{ }块。

文件内容示例:

"users"
{
    "76561199048621574"
    {
        "AccountName"       "acc1_internalname"
        "PersonaName"       "acc1_displayname"
        "RememberPassword"      "1"
        "WantsOfflineMode"      "0"
        "SkipOfflineModeWarning"        "0"
        "AllowAutoLogin"        "1"
        "MostRecent"        "1"
        "Timestamp"     "1660477659"
    }
    "76561198832716662"
    {
        "AccountName"       "acc2_internalname"
        "PersonaName"       "acc2_displayname"
        "RememberPassword"      "0"
        "WantsOfflineMode"      "0"
        "SkipOfflineModeWarning"        "0"
        "AllowAutoLogin"        "0"
        "MostRecent"        "0"
        "Timestamp"     "1650761551"
    }
}

批处理脚本代码

@echo off
setlocal enabledelayedexpansion
set "targetID="
set "currentID="
set "inUserBlock=0"
set "braceLevel=0"

for /f "usebackq tokens=* delims=" %%a in ("loginusers.txt") do (
    set "line=%%a"
    :: 匹配独立的SteamID行(带引号的纯数字串)
    echo !line! | findstr /r /c:"^[ \t]*\"[0-9][0-9]*\"[ \t]*$" >nul
    if not errorlevel 1 (
        set "currentID=!line!"
        :: 移除引号、空格和制表符
        set "currentID=!currentID:"=!"
        set "currentID=!currentID: =!"
        set "currentID=!currentID:	=!"
        set "inUserBlock=0"
        set "braceLevel=0"
    )
    :: 匹配左大括号,跟踪层级
    echo !line! | findstr /r /c:"^[ \t]*{[ \t]*$" >nul
    if not errorlevel 1 (
        set /a braceLevel+=1
        if !braceLevel! equ 1 (
            set "inUserBlock=1"
        )
    )
    :: 匹配右大括号,退出用户块
    echo !line! | findstr /r /c:"^[ \t]*}[ \t]*$" >nul
    if not errorlevel 1 (
        set /a braceLevel-=1
        if !braceLevel! equ 0 (
            set "inUserBlock=0"
        )
    )
    :: 在用户块内检查MostRecent是否为1
    if !inUserBlock! equ 1 (
        echo !line! | findstr /r /c:"^[ \t]*\"MostRecent\"[ \t]*\"1\"[ \t]*$" >nul
        if not errorlevel 1 (
            set "targetID=!currentID!"
        )
    )
)

:: 输出结果并传递变量到外部环境
if defined targetID (
    echo 匹配到的SteamID:!targetID!
    endlocal & set "STEAM_ID=%targetID%"
) else (
    echo 未找到MostRecent为1的用户
    endlocal & set "STEAM_ID="
)

代码说明

  • 启用延迟变量扩展:setlocal enabledelayedexpansion 允许在循环内实时修改变量值,避免批处理变量替换的延迟问题。
  • 跟踪SteamID:通过正则匹配提取独立的带引号数字串,清理掉引号、空格和制表符后暂存为currentID。
  • 括号层级判断:用braceLevel变量跟踪大括号嵌套层级,确保只处理当前SteamID对应的用户配置块,避免嵌套干扰。
  • 匹配MostRecent:在用户块内检查是否存在"MostRecent" "1",匹配成功则将暂存的SteamID赋值给targetID。
  • 变量传递:通过endlocal & set "STEAM_ID=%targetID%"将结果变量传递到脚本外部环境,方便后续命令调用。

内容的提问来源于stack exchange,提问作者Nicholas Stockton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 12:03:14