如何在批处理脚本中检查远程 URL 的地理 IP 数据?

如何在批处理脚本中检查远程 URL 的地理 IP 数据?

我尝试创建一个 bat 文件来通过 IP 检查国家/地区,但我不知道哪里出了问题。逻辑是 grep curl 输出,如果找到 US|CA|MX,则 !var! 不为空,然后回显“您住在北美”。问题是 !var! 每次都不为空。也许您知道没有 powershell 的情况下从 cmd 检查 IP 地理位置的其他方法?

@echo off
setlocal ENABLEDELAYEDEXPANSION
FOR /F "tokens=* USEBACKQ" %%F IN (`curl -k https://freegeoip.app/xml/ ^| findstr "US CA MX"`) DO (
SET var=%%F
)
if not !var! == "" (echo "You live in North America") else (echo "qwerty")
endlocal

答案1

@echo off && setlocal

for /f "delims=>< tokens=3 usebackq" %%F in (`
2^>^&1 curl -# -k https://freegeoip.app/xml/ ^| findstr "RJ SP GO"`)do set "_var=%%~F"

if defined _var ( 
     echo "You live in Brazil"
    )else echo\"qwerty"

endlocal

尝试改变你的 for 循环并且更具体,添加一个分隔符和一个标记以将字符串放在正确的位置(如果它们存在于curl输出中)......

> curl -# -k https://freegeoip.app/xml/ 2>&1 
<Response>
    <IP>187.111.14.73</IP>
    <CountryCode>BR</CountryCode>
    <CountryName>Brazil</CountryName>
    <RegionCode>RJ</RegionCode>
    <RegionName>Rio de Janeiro</RegionName>
    <City>Sao Goncalo</City>
    <ZipCode>24400</ZipCode>
    <TimeZone>America/Sao_Paulo</TimeZone>
    <Latitude>-22.8192</Latitude>
    <Longitude>-43.0402</Longitude>
    <MetroCode>0</MetroCode>
</Response>

使用"delims=>< tokens=3找到>RJ<<RegionCode>RJ</RegionCode>findstr "RJ SP GO"


一个确切的尝试是:

@echo off && setlocal

for /f "delims=>< tokens=3 usebackq" %%F in (
`2^>^&1 curl -# -k https://freegeoip.app/xml/ ^| ^
find "/RegionCode" ^| findstr "RJ SP GO"`)do set "_var=%%~F"

if defined _var ( 
     echo "You live in Brazil"
    )else echo\"qwerty"

endlocal

没有变量/for 循环的较短选项:

@echo off 

2>&1 curl -# -k https://freegeoip.app/xml/|find "/RegionCode"|findstr "RJ SP GO">nul && (
    echo "You live in Brazil") || echo\"qwerty" 

相关内容