【发布时间】:2016-04-19 18:26:49
【问题描述】:
我有以下批处理文件,它以 JSON 格式从数据库中检索数据、提取数字并存储它们:
set server=http://login:password@host:port
set db=PostgreSQL%%20DB
del IDs.txt
echo Section1 >> IDs.txt
curl "%server%/%db%/Section1" | jq .[] | jq .[] >> IDs.txt
echo Section2 >> IDs.txt
curl "%server%/%db%/Section2" | jq .[] | jq .[] >> IDs.txt
echo Section3 >> IDs.txt
curl "%server%/%db%/Section3" | jq .[] | jq .[] >> IDs.txt
...
它可以在 Windows 8 下运行,但在 Windows XP 下它会在第一条 curl-jq 行之后停止。没有错误。检索数字工作正常,但只有一次。
我尝试将 curl-jq 调用替换为
cmd /c "curl %server%/%db%/Section3 | jq .[] | jq .[] >> IDs.txt"
但它没有帮助。
怎么了?有没有办法让它在 XP 中工作?
提前致谢。
更新:这里是输出 JSON 的示例:
{"ids":[80001]}
或
{"ids":[12001,12002,12003,43120]}
我需要的只是将数字提取为一列:
80001
或
12001
12002
12003
43120
【问题讨论】:
-
只是为了排除显而易见的问题,您没有将 64 位版本的 jq 从 Win 8 复制到您的 XP 机器中,对吗?
-
一个有效的问题。
curl和jq在命令行中都能正常工作。它是来自官方网站的“jq-win32.exe”。如何查看jq是否有问题? -
您是否在脚本顶部设置了
@echo off?如果是这样,请尝试将其标记出来 (rem @echo off) 并查看停止脚本的行是否按照您编写它的方式进行评估。我想知道你是否有什么东西没有给我们看。curl | jq | jq命令是否位于括号代码块中(if语句或for循环)?如果是这样,您可能需要延迟扩展!server!或!db!。 -
我没有
echo off。所有行都被正确评估。生成的结果是正确的,唯一的问题是批处理文件没有继续到第二行。我唯一更改的是服务器和部分 URL。卷曲 | jq | jq 行不在循环内,但我确实计划稍后将它们放入for循环中。这会增加更多的问题吗?我确实尝试用call :IDout Section1 %out% %server% %db%或对外部批处理的类似调用替换echo-curl 行(并且必须用%%%%20 替换%%20)。结果是一样的:Section1 的 ID 写入后执行停止。 -
@rojo:行动! rep-1 初学者的另一个问题,他不关心他/她的问题!这是我不喜欢回答新成员问题的主要原因...
:(
标签: windows batch-file curl jq