Windows下获取网络连线实际名称,加强IP类设置脚本的兼容性
在之前的工作中,由于分区域管理,TCP 设置有差异,所以编写过很多关于 IP 切换的脚本,作为大批量电脑维护的脚本,最重要的就是兼容性,可不能就测试的那几台电脑通过了,然后发布给同事使用的时候,出现各种状况!
其中比较难解决的问题就是获取网络连线的实际名称,大部分人使用的 IP 设置脚本都是将【本地连接】写死在代码中,可实际上并不是所有电脑都叫本地连接;比如有的用户电脑可能升级了网卡驱动,或者更换了网卡,导致网络连线的名称变成“本地连接 2”,又比如有无聊好事者(某产线的作业员电脑),将网络连线的名称各种 DIY,我就见过一个修改成"操蛋的青春",瞬间无语!
好了,废话不多说,直接上菜!
对于网络连线的实际名称,可能出现的情况有: 1.网卡更换/驱动升级导致名称变更,比如本地连接 2 2.系统语系不同导致网络连线名称也不同,比如简体叫【本地连线】,而繁体却叫【區域連線】 3.系统版本不同,导致命令行显示也不同,比如 ipconfig/all,简体 XP 中显示为【Ethernet adapter 本地连接:】,而简体 WIN7 显示却是【以太网适配器 本地连接:】 4.其他不可预料的问题
那如果要编写一个通用的 IP 修改脚本,必须就得考虑到以上 1-3 条的问题,才能提高兼容性,接近版本/简繁语系通吃!(英文版暂未考虑) (PS:以下代码只为说明获取名称,其他一切从简展示):
一、先给出一个 XP 下简繁体通用的获取连线名称的代码
@echo off
for /f "tokens=1,2,3 delims=: " %%i in ('ipconfig/all ^|find /i "Ethernet adapter"') do set netname=%%k
netsh interface ip set address name="%netname%" source=static addr=192.168.1.105 mask=255.255.254.0 gateway=192.168.1.1
pause
简单说明:此代码通过 ipconfig/all 获取连线信息,然后抓取 Ethernet adapter 之后的名称,即%%k 为实际连线名称,理论上简繁体通用。
代码缺点: 1.不兼容 WIN7,win7 使用 ipconfig/all 后,得到的是【乙太網路卡 區域連線:】 2.本地超过一块网卡的时候应该会出错(具体未实测) 适用场合:在保证单网卡和 XP 环境下可用不区分简繁体使用。
二、来个 XP/WIN7/简繁体通吃的连线名称获取代码(最近才帮维护人员写的,热乎着呢!):
rem 以上内容略
for /f tokens^=1^,2^ delims^=^" %%j in ('netsh interface ip show config') do (
if "%%j"=="介面 " (
netsh interface ip set address name="%%k" source=static addr=192.168.1.105 mask=255.255.254.0 gateway=192.168.1.1
)
if "%%j"=="接口 " (
netsh interface ip set address name="%%k" source=static addr=192.168.1.105 mask=255.255.254.0 gateway=192.168.1.1
)
)
简单说明:通过 netsh 获取信息,能兼容 XP 和 WIN7;然后通过【介面】还是【接口】的区分,又能兼容简繁体,所以是通吃代码!
代码缺点:暂未实现多网卡的区分功能,所以双/多网卡电脑执行此脚本,所有网卡均设置成一样的信息,这很蛋疼! 适用范围:只要不存在多网卡,均能使用!多网卡慎用哦~!
三、最后,再给个 XP 环境下加入了多网卡判断的获取连线名称的脚本吧!
Ps:或许有筒子可以参考做出全兼容的脚本呢!(俺时间太紧,就不折腾啦)
rem 请使用call :getnetnme调用此模块,然后从临时文件"%~dp0dns.tmp"中获取连线名称!
:getnetname
setlocal enabledelayedexpansion
set "NIC_flag=Ethernet"
set NIC_num=0
for /f "tokens=1,2,3,* delims=: " %%i in ('ipconfig /all') do (
set /a num+=1
if "%%i"=="%NIC_flag%" (
set /a num_=!num!+3,NIC_num+=1
set NIC_name!Nic_num!=%%k)
if !num! EQU !num_! set var=%%l
set var=!var:*:=!
set Desp!Nic_num!=!var!
)
if %NIC_num% gtr 1 ( echo 发现多块网卡,请手动设置...
pause>nul
goto TCPset
)
for /l %%i in (1 1 %NIC_num%) do echo !NIC_name%%i!>"%~dp0dns.tmp"
goto :eof
简单说明:在代码一的基础上加上了网卡数量的判断,超过一块就提示手动设置,避免因多块网卡设置 IP 出现问题。
代码缺点:
1.还是未能解决多块网卡自动设置 IP 的情况,请有兴趣的筒子参考改进哦! 2.无法兼容 WIN7
好了,以上就是获取实际网络连线名称的所有代码了,希望能帮到有需要的朋友!
- 如何通过Livy的RESTful API接口向非Kerberos环境的CDH集群提交作业
- 如何编译Livy并在非Kerberos环境的CDH集群中安装
- Livy,基于Apache Spark的开源REST服务,加入Cloudera Labs
- 如何在RedHat7上使用Bind搭建DNS服务
- 如何在Redhat7.3的CDH5.14中启用Kerberos
- 如何使用SAML配置Cloudera Manager的身份验证
- 如何使用Shibboleth搭建IDP服务并集成OpenLDAP
- 如何获取Hive正在执行或者已结束的的MapReduce作业的SQL语句
- 如何启用Oozie的HA
- 如何使用Oozie API接口向Kerberos环境的CDH集群提交Spark作业
- 如何降级Cloudera Manager和CDH
- 如何在CDH中安装和使用StreamSets
- 如何使用Oozie API接口向非Kerberos环境的CDH集群提交Shell工作流
- 如何使用Oozie API接口向非Kerberos环境的CDH集群提交Java作业
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 09 . Prometheus监控tomcat+jvm
- 09 . Kubernetes之pv、pvc及使用nfs网络存储应用
- 10 . Kubernetes之Configmap,Secret
- struts2(三)---使用EL表达式,显示Action中的数据
- 02 . 分布式存储之FastDFS 高可用集群部署
- 11 . KubernetesRBAC认证及ServiceAccount、Dashboard
- 12 . Kubernetes之Statefulset 和 Operator
- 01 . SaltStack部署配置及简单应用
- 02 . SaltStack高级用法(Python API)
- 小加载动画
- 日志收集工具简单对比
- [蓝桥杯][2013年第四届真题]幸运数
- 04 . Filebeat简介原理及配置文件和一些案例
- 05 . ELK Stack+Redis日志收集平台
- python开发【第一篇】