吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 335|回复: 13
收起左侧

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

[复制链接]
Love0912 发表于 2024-11-14 17:44
本帖最后由 Love0912 于 2024-11-15 08:41 编辑

先看代码
[Asm] 纯文本查看 复制代码
@echo off
setlocal
echo 正在获取 IP 地址...
for /f "delims=" %%i in ('curl -s [url]https://myip.ipip.net/'[/url]) do (
echo %%i | findstr /r "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" >nul
set "IP=%%i"
        goto :break   
)
:break
 
    echo 您的外网IP地址是: %IP%  

pause


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

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

微信截图_20241114173957.png
-------------------------------------------------------------
感谢各位大佬的帮助,这个问题得到了解决,下面是我修正后的代码,可以完美显示了,有类似问题的可以参考一下,下面评论区也有非常好的解决方案,可以自己翻
[Asm] 纯文本查看 复制代码
@echo off
setlocal enabledelayedexpansion
chcp 65001 >nul
cls

rem 获取IP地址
for /f "tokens=2 delims=: " %%i in ('curl -s [url]https://myip.ipip.net/'[/url]) do (
    set "IP=%%i"
)
for /f "tokens=3,* delims=: " %%i in ('curl -s [url]https://myip.ipip.net/'[/url]) 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
ZX0228 发表于 2024-11-14 18:05
298638651 发表于 2024-11-14 18:10
wonder2018 发表于 2024-11-14 18:17

执行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的编码代码页
[Bash shell] 纯文本查看 复制代码
@echo off
chcp 65001
setlocal
echo Get IP...
for /f "delims=" %%i in ('curl -s https://myip.ipip.net/') do (
echo %%i | findstr /r "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*" >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 编辑

[C] 纯文本查看 复制代码
@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


换个思路试试..
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 11:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表