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

Windows命令行调用jq-win32.exe时INDEX字符串过滤器处理失败原因

问题原因

Windows命令提示符(CMD)默认使用双引号作为参数的边界标识符,你在jq过滤器内部直接使用的"?sv="双引号会被CMD识别为参数结束标记,导致传给jq的过滤器内容被截断、语法错误,这就是本地执行失败的核心原因,和jq本身的逻辑无关。

解决方案

方案1:修改命令行转义规则

将过滤器内部所有的双引号用\"转义,修改后的命令如下:

c:\EJPK\exe>type "c:\TEMP\jpk1012\out\JPK_VAT.xml.sig.resp"| d:\curl\send\bin\jq-win32.exe -r "{ReferenceNumber:.ReferenceNumber} + {URI:(.RequestToUploadFileList[0].Url)} + {URI_ABS:.RequestToUploadFileList[0].Url[0:.RequestToUploadFileList[0].Url|index(\"?sv=\")] } +{URI_SAS:.RequestToUploadFileList[0].Url[.RequestToUploadFileList[0].Url|index(\"?sv=\"):] } + {FILE:.RequestToUploadFileList[0].FileName} + {Key:.RequestToUploadFileList[0].HeaderList[0].Value}"

方案2:使用过滤器文件(更稳定,无转义问题)

该方案完全避开命令行转义规则限制,出错概率更低:

  1. 将你验证通过的过滤器内容保存为纯文本文件,命名为filter.jq,内容可简化为如下形式(无需重复用+拼接对象,逻辑和原语句完全等价):
{
  ReferenceNumber: .ReferenceNumber,
  URI: .RequestToUploadFileList[0].Url,
  URI_ABS: .RequestToUploadFileList[0].Url[0:.RequestToUploadFileList[0].Url|index("?sv=")],
  URI_SAS: .RequestToUploadFileList[0].Url[.RequestToUploadFileList[0].Url|index("?sv="):],
  FILE: .RequestToUploadFileList[0].FileName,
  Key: .RequestToUploadFileList[0].HeaderList[0].Value
}
  1. 执行命令时通过-f参数指定过滤器文件即可:
c:\EJPK\exe>type "c:\TEMP\jpk1012\out\JPK_VAT.xml.sig.resp"| d:\curl\send\bin\jq-win32.exe -r -f filter.jq

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:15:03