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

如何用PowerShell/CMD从文本文件中提取指定scanId值?

提取文本文件中JSON的scanId值

PowerShell 解决方案

直接解析JSON是最可靠的方式,能避免正则误匹配无关内容:

方法1:提取完整JSON块后解析

如果文件中的JSON是完整的对象(用{}包裹,单行或多行),可以先提取再解析:

# 读取整个文件内容
$fileContent = Get-Content -Path C:\Folder\scanjson.txt -Raw
# 匹配完整JSON对象((?s)启用单行模式,让.匹配换行符)
if ($fileContent -match '(?s)\{.*\}') {
    # 将匹配到的JSON字符串转为对象
    $jsonObject = $matches[0] | ConvertFrom-Json
    # 直接输出scanId值
    $jsonObject.scanId
}

方法2:针对性匹配scanId行

如果JSON里scanId的格式固定(比如"scanId": 12345),可以用精准正则匹配:

Select-String -Path C:\Folder\scanjson.txt '"scanId":\s*(\d+)' | ForEach-Object { $_.Matches.Groups[1].Value }

这个正则只匹配带引号的scanId键后跟的数字,不会命中上传进度里的无关行。

CMD 解决方案

CMD没有原生JSON解析工具,只能通过字符串处理提取:

@echo off
setlocal enabledelayedexpansion
# 查找包含"scanId"的行,分割后提取值
for /f "tokens=2 delims=:, " %%a in ('findstr /i "\"scanId\"" C:\Folder\scanjson.txt') do (
    set "scanId=%%a"
    # 移除可能的引号和逗号
    set "scanId=!scanId:"=!"
    set "scanId=!scanId:,=!"
    echo !scanId!
    goto :end
)
:end
endlocal

问题说明

你之前的命令会匹配所有冒号后跟数字的行,上传进度里类似上传进度: 75%的内容也会被命中,所以返回无关结果。只有针对性匹配scanId键或直接解析JSON,才能准确获取目标值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:20:59