首页 > 其他 > 详细

bat批处理脚本: 显示多个网络连接的IP地址等信息

时间:2021-03-01 16:09:42      阅读:79      评论:0      收藏:0      [点我收藏+]

前言

为何使用bat批处理脚本?

  1. bat批处理脚本脚本基本在所Windows上都可以直接执行,无需额外安装解释器,这点是选择bat的最主要原因之一。
  2. 相比VB、Delphi、易语言等编译后执行的程序,bat批处理脚本不易被杀软误报病毒或威胁。

为什么写这个脚本?

工作中,是不是经常遇到问小白IP地址等信息时,他们只会回答“我不会”?嗯,那你就需要这个脚本。

批处理文件扩展名.bat or .cmd

关于.bat.cmd的区别,请参考批处理之家的帖子这个360doc上的文章
本人每篇文章中的脚本下面都会备注清楚我测试时使用的扩展名。个人目前习惯使用.cmd扩展名。

bat脚本: 显示多个网络连接的IP地址等信息

1、代码

为了让大家有机会先自己研究代码,我注释都去掉了。这里我提供了带注释的批处理脚本文件,如需要阅读注释,请下载:

蓝奏云:
https://echowyf.lanzous.com/b0d8tv8ch
密码: i6pf

建议使用扩展名:.cmd

@ECHO OFF & setlocal enabledelayedexpansion
TITLE 显示所有已连接的网络连接信息 by.52Echo
mode con: cols=80 lines=30
CALL :get_NIC_info
pause>nul
EXIT /B 0

:get_NIC_info
SET "_i_=0"

ECHO 所有已连接的网络连接信息(未插网线不会显示在下方):
ECHO ---------------------------------------------------
for /f "tokens=1,2 delims==" %%a in (‘wmic nic where "NetEnabled=‘TRUE‘" get Index^,MACAddress^,Description^,NetConnectionID /value‘) do (
	for /f "delims=" %%u in ("%%a") do for /f "delims=" %%v in ("%%b") do (
		IF "%%u" NEQ "" SET "%%u=%%v"
		IF /i "%%u"=="Index" (
			for /f "tokens=1,2 delims==" %%c in (‘wmic nicconfig where "Index=!Index!" get IPAddress^,IPSubnet^,DefaultIPGateway^,DNSServerSearchOrder /value‘) do (
				for /f "delims=" %%x in ("%%c") do for /f "delims=" %%y in ("%%d") do (
					IF "%%x" NEQ "" SET "%%x=%%y"& CALL :trim_IP %%x
				)
			)
		) ELSE IF /i "%%u"=="NetConnectionID" (
			REM last value of one NIC here
			SET/a _i_+=1
			ECHO No.!_i_!           : !NetConnectionID!
			ECHO   描述         : !Description!
			ECHO   MAC 物理地址 : !MACAddress!
			ECHO   IPv4 地址    : !IPAddress!
			ECHO   子网掩码     : !IPSubnet!
			ECHO   默认网关     : !DefaultIPGateway!
			ECHO   DNS 服务器   : !DNSServerSearchOrder!
			ECHO ----------------
			SET "MACAddress="
			SET "Description="
			SET "NetConnectionID="
			SET "IPAddress="
			SET "IPSubnet="
			SET "DefaultIPGateway="
			SET "DNSServerSearchOrder="
		)
	)
)
ECHO 已连接的网络连接数量: %_i_%
GOTO:EOF

:trim_IP
(set %1=!%1:^"=!&set %1=!%1:{=!&set %1=!%1:}=!)
IF /i "%1"=="IPAddress" for /f "delims=," %%a in ("!%1!") do set "%1=%%a"
IF /i "%1"=="IPSubnet" for /f "delims=," %%a in ("!%1!") do set "%1=%%a"
GOTO:EOF

2、运行结果如下

本人装了VMware虚拟机,故显示多个网络连接,这也正是本人要测试多网络连接的情况。

技术分享图片

3、分析

此脚本使用了wmic nicwmic nicconfig两个WMIC命令来获取网络连接相关信息,是学习批处理之家这个帖子后写的。以前还分别用过ipconfig /allnbtstat -A x命令各写过一个版本,但明显获取到的信息要么不易处理,要么信息内容有限。
两个命令主要参考到的内容如下:

wmic nic:

NetEnabled 值为 TRUE 时,网络适配器[已启用]且[已连接]
NetEnabled 值为 FALSE 时,网络适配器[已禁用]或[未连接]
PhysicalAdapter 值为 TRUE 时,表示物理网络适配器,注意:安装VMWARE生成的网络适配器也被当作物理网络适配器
PhysicalAdapter 值为 FALSE 时,表示逻辑/虚拟网络适配器
NetConnectionID 表示 “控制面板\网络和 Internet\网络连接”里显示的各个连接的名称,不在“\网络连接”下显示的 NIC 该值为空
AdapterType 以太网 802.3, 隧道
AdapterTypeId 0, 15 (所以是不是也可以考虑用这个值来过滤结果)

wmic nicconfig:

IPEnabled 值为 TRUE 时,网络适配器[已连接]
IPEnabled 值为 FALSE 时,网络适配器[未连接]
IPAddress IPv4和IPv6地址
IPSubnet 子网掩码
DefaultIPGateway 默认网关
DNSServerSearchOrder DNS服务器

两个命令共有的且相同的值:

Description NIC 的名称,可能包含品牌信息等。值中可能含有英文(),注意不要和代码的括号错乱,建议在""内使用
MACAddress 物理地址 格式 xx:xx:xx:xx:xx:xx
Index 0,1,2,3...
本脚本是筛选了wmic nicNetEnabled 值为 TRUE的网络连接,再根据Index值,从wmic nicconfig中获得IP地址等具体信息。

4、注意点

wmic nicwmic nicconfig两个命名筛选结果中包含有空白的行,你需要将空白行过滤掉。

结尾

欢迎一起研究讨论bat批处理脚本,对脚本有何疑问可以留言交流。

bat批处理脚本: 显示多个网络连接的IP地址等信息

原文:https://www.cnblogs.com/52Echo/p/bat-01-show-IP-address.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!