Love0912 发表于 2024-11-14 17:44

关于利用批处理获取外网地址 显示异常的求助

本帖最后由 Love0912 于 2024-11-15 08:41 编辑

先看代码
@echo off
setlocal
echo 正在获取 IP 地址...
for /f "delims=" %%i in ('curl -s https://myip.ipip.net/') do (
echo %%i | findstr /r "*\.*\.*\.*" >nul
set "IP=%%i"
      goto :break   
)
:break

    echo 您的外网IP地址是: %IP%

pause


我想要达到的效果是,像下方图片中这样把信息全部显示出来,最次结果是只显示IP地址也可以(如果是只显示IP地址就屏蔽掉其它的所有信息 免得影响观看)


但是现在的问题是,可以成功获取到信息,但是有部分信息显示乱码,单独获取IP地址的代码可能是有BUG 一直不能成功落地。。大概就是下面这个样子的了


-------------------------------------------------------------
感谢各位大佬的帮助,这个问题得到了解决,下面是我修正后的代码,可以完美显示了,有类似问题的可以参考一下,下面评论区也有非常好的解决方案,可以自己翻
@echo off
setlocal enabledelayedexpansion
chcp 65001 >nul
cls

rem 获取IP地址
for /f "tokens=2 delims=: " %%i in ('curl -s https://myip.ipip.net/') do (
    set "IP=%%i"
)
for /f "tokens=3,* delims=: " %%i in ('curl -s https://myip.ipip.net/') do (
    set "gs=%%i %%j"
)

rem 输出IP地址
if defined IP (
    echo 您的外网: !IP!
    echo 您的归属地 !gs!
) else (
    echo 无法获取外网IP地址
)

pause


无语的小紫英 发表于 2024-11-14 17:54

把文件格式改成utf-8试试

renpeng009 发表于 2024-11-14 18:04

CMD不支持UTF8编码

ZX0228 发表于 2024-11-14 18:05

另存为,编码ANSI

298638651 发表于 2024-11-14 18:10

https://www.helloimg.com/i/2024/11/14/6735cbcd335a3.png

wonder2018 发表于 2024-11-14 18:17

renpeng009 发表于 2024-11-14 18:04
CMD不支持UTF8编码

执行chcp 65001即可切换为UTF8

WXJYXLWMH 发表于 2024-11-14 18:20

命令中添加

二选一 试试看

::在 Windows 批处理中,如果路径中含有中文字符,可能会出现乱码的情况。
::报错解决:Windows批处理bat文件切换含有中文字符的路径无法识别中文字符(乱码)
::在批处理文件开头添加以下语句:
chcp 936
::这个命令可以将命令行窗口的字符编码设置为 GBK,从而支持中文字符。

::在 Windows 批处理中,如果路径中含有中文字符,可能会出现乱码的情况。
::报错解决:Windows批处理bat文件切换含有中文字符的路径无法识别中文字符(乱码)
::在批处理文件开头添加以下语句:
chcp 65001
::这个命令可以将命令行窗口的字符编码设置为 UTF-8,从而支持中文字符。

有时候,及个别情况下,这两种方式有用。

ixhao 发表于 2024-11-14 18:24

设置文件编码为ANSI,应该是网站的字符是utf-8,设置cmd的编码代码页
@echo off
chcp 65001
setlocal
echo Get IP...
for /f "delims=" %%i in ('curl -s https://myip.ipip.net/') do (
echo %%i | findstr /r "*\.*\.*\.*" >nul
set "IP=%%i"
      goto :break   
)
:break

    echo your ip: %IP%

pause

wonder2018 发表于 2024-11-14 18:26

本帖最后由 wonder2018 于 2024-11-14 18:30 编辑

看了一下你使用的网站,它返回的内容是utf8格式的。
需要在第二行添加“chcp 65001”
然后将bat保存为utf8格式再执行。(记事本右下角可以看到格式是utf-8,被水印挡住了一些www)




298638651 发表于 2024-11-14 18:35

本帖最后由 298638651 于 2024-11-14 18:42 编辑

@echo off
setlocal
echo 正在获取 IP 地址...
for /f "delims=" %%i in ('powershell "(Invoke-WebRequest -UseBasicParsing -Uri https://api.ipify.org).Content"') do (
    set "IP=%%i"
)

echo 正在查询 IP 归属地...
for /f "delims=" %%a in ('powershell "(Invoke-WebRequest -UseBasicParsing -Uri http://ip-api.com/json/%IP%?lang=zh-CN).Content | ConvertFrom-Json | Select -Property country, regionName, city, isp"') do (
    echo %%a
)

echo 您的外网IP地址是: %IP%
pause
endlocal


换个思路试试..
https://www.helloimg.com/i/2024/11/14/6735d353c046c.png
页: [1] 2
查看完整版本: 关于利用批处理获取外网地址 显示异常的求助