- bat批处理脚本脚本基本在所Windows上都可以直接执行,无需额外安装解释器,这点是选择bat的最主要原因之一。
- 相比VB、Delphi、易语言等编译后执行的程序,bat批处理脚本不易被杀软误报病毒或威胁。
工作中,是不是经常遇到问小白IP地址等信息时,他们只会回答“我不会”?嗯,那你就需要这个脚本。
关于.bat与.cmd的区别,请参考批处理之家的帖子这个360doc上的文章。
本人每篇文章中的脚本下面都会备注清楚我测试时使用的扩展名。个人目前习惯使用.cmd扩展名。
为了让大家有机会先自己研究代码,我注释都去掉了。这里我提供了带注释的批处理脚本文件,如需要阅读注释,请下载:
蓝奏云:
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
本人装了VMware虚拟机,故显示多个网络连接,这也正是本人要测试多网络连接的情况。
此脚本使用了wmic nic
和wmic nicconfig
两个WMIC命令来获取网络连接相关信息,是学习批处理之家这个帖子后写的。以前还分别用过ipconfig /all
和nbtstat -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 nic
中NetEnabled 值为 TRUE的网络连接,再根据Index值,从wmic nicconfig
中获得IP地址等具体信息。
wmic nic
和wmic nicconfig
两个命名筛选结果中包含有空白的行,你需要将空白行过滤掉。
欢迎一起研究讨论bat批处理脚本,对脚本有何疑问可以留言交流。
原文:https://www.cnblogs.com/52Echo/p/bat-01-show-IP-address.html