@echo off
for /F %%I in ('curl https://ipinfo.io/ip') do set IP1=%%I
for /F %%A in ('curl http://api.ipstack.com/%IP1%?access_key=mykey&format=1') do set IP=%%A
echo %IP% pause
我不知道如何让第二个 curl 使用我给它的变量,我不明白我做错了什么
当我做
curl http://api.ipstack.com/%IP1%?access_key=mykey&format=1
有用
答案1
等号和 & 符号在这里会给您带来一些问题。请尝试将 URL 括在引号中:
for /F %%A in ('curl "http://api.ipstack.com/%IP1%?access_key=mykey&format=1"') do set IP=%%A
看看是否能得到更好的结果。您可能还想使用来curl -s
抑制 CLI 可以返回的一些标头。
答案2
通过使用 Delims=
for /F "delims=" %%I in ('curl -s https://ipinfo.io/ip') do set "IP1=%%I"
Echo %Ip1%
输出:
120.16.49.75
从命令行,我期望以下内容能够使用正确的密钥
C:\WINDOWS\system32>for /F "USEBACKQ Tokens=* delims=" %A in (`"curl -s http://api.ipstack.com/%IP1%?access_key=mykey^&f ormat=1"`) do set "IP=%~A"
C:\WINDOWS\system32>set "IP={"
C:\WINDOWS\system32>set "IP= "success": false,"
C:\WINDOWS\system32>set "IP= "error": {"
C:\WINDOWS\system32>set "IP= "code": 101,"
C:\WINDOWS\system32>set "IP= "type": "invalid_access_key","
C:\WINDOWS\system32>set "IP= "info": "You have not supplied a valid API Access Key. [Technical Support: support@apila yer.com]""
C:\WINDOWS\system32>set "IP= }"
C:\WINDOWS\system32>set "IP=}"
C:\WINDOWS\system32>
顺便说一句,}
返回的你是返回给变量的错误消息的最后一部分。