我尝试创建一个 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"