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

在Windows Shell中用JQ按子元素内容过滤JSON及Tor中继筛选

在Windows批处理中用jq过滤Tor中继共识数据的解决方案

我明白你在Windows批处理里用jq处理Onionoo数据时遇到的引号转义和过滤逻辑问题,这确实是Windows shell和Linux/bash的差异导致的小坑,下面给你一步步的解决方法:

准备工作

首先确保你已经下载了Windows版本的jq,可直接从官方渠道获取,你可以把它放到系统PATH目录里(比如C:\Windows\System32),或者在脚本里指定它的完整路径(比如C:\tools\jq.exe)。

方案1:直接在批处理中写过滤表达式(处理引号转义)

Windows批处理里双引号需要用两个双引号""来转义,所以我们的jq过滤逻辑要做相应调整。下面是完整的批处理脚本:

@echo off
setlocal

:: 定义输出文件路径
set "OUTPUT=tor_filtered_relays.json"

:: 获取Onionoo数据并过滤:筛选Running状态且带Fast标记的中继,保留指定字段
curl -s https://onionoo.torproject.org/details ^
| jq "`.relays[] | select(.status==""Running"" and (.flags[] | contains(""Fast""))) | {nickname, fingerprint, address, or_port}`" ^
> %OUTPUT%

echo 处理完成!结果已保存到 %OUTPUT%
pause

逻辑解释:

  • .relays[]:遍历返回JSON里的所有中继条目
  • select(.status==""Running"" and (.flags[] | contains(""Fast""))):筛选两个条件都满足的中继:
    1. 状态为Running
    2. 标记数组中包含Fast
  • {nickname, fingerprint, address, or_port}:只保留你需要的字段,生成精简版JSON

方案2:用外部jq脚本文件(避免引号转义麻烦)

如果觉得转义引号太麻烦,推荐把过滤逻辑写到单独的.jq文件里,这样更清晰易维护:

  1. 创建一个名为tor_filter.jq的文件,内容如下:
.relays[]
| select(.status == "Running" and (.flags[] | contains("Fast")))
| {
    nickname,
    fingerprint,
    address,
    or_port,
    dir_port  # 可以根据需求添加/删除字段
  }
  1. 然后写批处理脚本调用这个文件:
@echo off
setlocal

set "OUTPUT=tor_filtered_relays.json"
set "JQ_SCRIPT=tor_filter.jq"

:: 如果jq不在PATH里,替换成你的jq完整路径,比如 C:\tools\jq.exe
curl -s https://onionoo.torproject.org/details | jq -f %JQ_SCRIPT% > %OUTPUT%

echo 处理完成!结果已保存到 %OUTPUT%
pause

替代方案:用PowerShell辅助(如果批处理限制多)

如果批处理的管道和引号问题还是困扰你,可以在批处理里调用PowerShell来处理,PowerShell对引号的处理更接近Linux:

@echo off
setlocal

set "OUTPUT=tor_filtered_relays.json"

powershell -Command "(Invoke-WebRequest -Uri 'https://onionoo.torproject.org/details').Content | jq '.relays[] | select(.status=="Running" and (.flags[] | contains("Fast"))) | {nickname, fingerprint}' > %OUTPUT%"

echo 处理完成!结果已保存到 %OUTPUT%
pause

注意事项

  • 如果你的系统没有自带curl(Windows 10及以上默认有),可以用PowerShell的Invoke-WebRequest替代,就像上面的PowerShell方案那样。
  • 可以根据自己的需求修改{nickname, fingerprint,...}里的字段,比如添加bandwidth、country_code等,只需要参考Onionoo返回的JSON结构来调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:07:22