[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[网络连接] [已解决]断网状态下批处理如何获取ip地址

正常情况下可以通过ipconfig /all或route print获取IP地址,MAC地址。但现在有个需求需要在不插网线不联网的情况下获取机器的IP地址(机器的IP地址是固定的)。
这个是可以实现的吗?谢谢大佬们!

本帖最后由 Echo11 于 2022-3-28 16:08 编辑

回复 4# Batcher


    大佬你好,细究发现,注册表方法简单这样写在某些情况下是不准确的,比如你先动态获取了IP,然后改又设置了静态IP,虽然网络适配器状态中只显示当前使用的,但是注册表里不会马上把原来动态获取的IP等信息清空。动态IP和静态IP等信息,在这个注册表项下,是用不同的键名来存储的。这样会获得两个IP地址。

下面是我修改的显示完整信息的代码(未精简)
  1. @ECHO OFF
  2. for /f "tokens=3" %%i in ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards" /s ^| findstr "ServiceName"') do (
  3. ECHO.------------------------------
  4. for /f "tokens=3" %%j in ('reg query "HKLM\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\%%i\Connection" /s /v "Name" ^| findstr /I "Name"') do ECHO.网络链接名称:[%%j]
  5. for /f "tokens=3" %%k in ('reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\%%i" /v "EnableDHCP" ^| findstr /I "EnableDHCP"') do (
  6. REM 使用DHCP,DNS可以是DHCP获取,可以是静态指定
  7. IF %%k==0x1 (
  8. ECHO.DHCP:启用
  9. for /f "tokens=3" %%l in ('reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\%%i" ^| findstr /I /C:" DhcpIPAddress "') do ECHO.IPAddress:[%%l]
  10. for /f "tokens=3" %%l in ('reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\%%i" ^| findstr /I /C:" DhcpSubnetMask "') do ECHO.SubnetMask:[%%l]
  11. for /f "tokens=3" %%l in ('reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\%%i" ^| findstr /I /C:" DhcpDefaultGateway "') do ECHO.DefaultGateway:[%%l]
  12. for /f "tokens=2,*" %%m in ('reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\%%i" ^| findstr /I /C:" NameServer "') do IF not "%%n"=="" (
  13. ECHO.Static DNS:[%%n]
  14. ) else (
  15. for /f "tokens=2,*" %%o in ('reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\%%i" ^| findstr /I /C:" DhcpNameServer "') do ECHO.DHCP DNS:[%%p]
  16. )
  17. )
  18. REM 不使用DHCP,DNS必须也是静态指定
  19. IF %%k==0x0 (
  20. ECHO.DHCP:未启用
  21. for /f "tokens=3" %%l in ('reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\%%i" ^| findstr /I /C:" IPAddress "') do ECHO.IPAddress:[%%l]
  22. for /f "tokens=3" %%l in ('reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\%%i" ^| findstr /I /C:" SubnetMask "') do ECHO.SubnetMask:[%%l]
  23. for /f "tokens=3" %%l in ('reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\%%i" ^| findstr /I /C:" DefaultGateway "') do ECHO.DefaultGateway:[%%l]
  24. for /f "tokens=2,*" %%m in ('reg query "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\%%i" ^| findstr /I /C:" NameServer "') do ECHO.Static DNS:[%%n]
  25. )
  26. )
  27. )
  28. pause
复制代码

TOP

1. netsh 命令
  1. netsh interface ip dump | findstr "address="
复制代码
2. 注册表
  1. @echo off
  2. for /f "tokens=3" %%i in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards" /s ^| findstr "ServiceName"') do (
  3.     for /f "tokens=3" %%j in ('reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\%%i" /v IPAddress 2^>nul ^| findstr "IPAddress"') do (
  4.         echo,%%j
  5.     )
  6. )
  7. pause
复制代码
1

评分人数

    • Echo11: 注册表方法最兼容,断网或DHCP的情况都查得 ...技术 + 1
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# cutebe


   非常感谢您的指导。测试可用!谢谢!

TOP

IP:netsh
MAC:getmac
如无特别说明,代码测试环境均为 XP SP3

TOP

返回列表