Json 使用Windows批处理的JQ-选择失败

Json 使用Windows批处理的JQ-选择失败,json,windows,batch-file,mule,jq,Json,Windows,Batch File,Mule,Jq,将Windows批处理文件与JQ一起使用,并尝试通过管道选择筛选器 使用JQ解析的Json示例: { "name": "test-mmc-deploy", "id": "local$3d2075c5-73c0-47aa-8df5-cee3a70f68c4", "lastModified": "Mon, 1 May 2017 13:56:15.980 AEST", "servers": [ "local$520ee705-bdbb-4132-94cf-63bb213d2b4

将Windows批处理文件与JQ一起使用,并尝试通过管道选择筛选器

使用JQ解析的Json示例:

{
  "name": "test-mmc-deploy",
  "id": "local$3d2075c5-73c0-47aa-8df5-cee3a70f68c4",
  "lastModified": "Mon, 1 May 2017 13:56:15.980 AEST",
  "servers": [
    "local$520ee705-bdbb-4132-94cf-63bb213d2b46"
  ],
  "status": "DEPLOYED",
  "applications": [
    "local$f3d791bd-14d9-4491-9541-5fa04d8c3164"
  ],
  "href": "http://localhost:9090/mmc-console-3.8.2/api/deployments/local$3d2075c5-73c0-47aa-8df5-cee3a70f68c4",
  "clusterNames": [],
  "reconciled": false,
  "clusterIds": []
}
普通命令行JQ与Curl一起工作,并给出如下输出:

curl--basic-u admin:admin | jq.data[]| select(.name=\“test-mmc-deploy\”).id

“本地$3d2075c5-73c0-47aa-8df5-cee3a70f68c4”

试图使下面的命令在Windows批处理文件中工作正在创建转义字符噩梦。需要帮助吗

for /f "tokens=*" %%a in ('echo %%app_deploy_list%% ^| jq "".data[] ^| select(.name==\"test-mmc-deploy\"^).id""') do (set app_id=%%a)
echo Application found: %app_id%
其中%%app\u deploy\u list%%包含上面声明的json

我得到的错误是:
“select”未被识别为内部或外部命令

Windows正试图将
jq
的输出导入
select
,但找不到可执行文件
select


我不熟悉
curl
jq
,但似乎您需要一个literal
。在您使用的引用命令格式中,literal
可以通过
^^^^^ ^ jq>

生成。如果不必要地转义,命令解释器可能会逐字插入它们。这是真的我们对双引号的使用是不一致的。您可能过早地切断了字符串,而过滤器实际上是作为附加管道命令运行的

直接在命令提示符下运行此命令对我很有效:

for /f "tokens=*" %a in ('jq ".data[] | select(.name==\"test-mmc-deploy\").id" input.json') do (echo "Application found: %a")
然后,在批处理文件中,只需将循环变量的
%
增加一倍

for /f "tokens=*" %%a in ('jq ".data[] | select(.name==\"test-mmc-deploy\").id" input.json') do (
    set app_id=%%a
)
echo Application found: %app_id%
为了能够将curl响应直接传递到jq,只需逃离管道(而无需其他)


为什么要使用
%%app\u deploy\u list%%
而不是
%app\u deploy\u list%
?您好,这是一个错误,我会删除它,但不会对批处理编译器的选择错误造成影响。我有点惊讶于它能正常工作;通常,
中的
内部需要转义.Hi Mercado,我不想保存文件,但使用作为批处理的一部分创建的变量尝试使用它…for/f“tokens=*”%%a in('echo%app\u deploy\u list%^ jq.).data[]^ select^(.name=\“test mmc deploy\”^).id“')do(set app\u id=%%a)产生:错误:语法错误,意外无效\u字符,预期$end(Windows cmd外壳引用问题?)在第1行:。数据[]^选择^.id@SomethingDark:我不太清楚Windows命令行的转义规则,我更愿意使用bash或powershell提示符。但我知道你的意思。但据我所知,你只需要在不带引号的参数中使用它们。这里所有内容都带引号,所以我认为没有必要。但我可能错了。Marki将此设置为正确-尽管无法在不保存本地文件的情况下四处走动
for /f "tokens=*" %%a in ('curl --basic -u admin:admin http://localhost:9090/mmc-console-3.8.2/api/deployments ^| jq ".data[] | select(.name==\"test-mmc-deploy\").id"') do (
    set app_id=%%a
)
echo Application found: %app_id%