Board logo

标题: [文本处理] [已解决]批处理如何获取网络接口名称/网络连接名称 [打印本页]

作者: locoman    时间: 2015-5-19 14:37     标题: [已解决]批处理如何获取网络接口名称/网络连接名称

本帖最后由 pcl_test 于 2016-8-9 10:04 编辑

教我怎么过滤(批处理命令find)这段文本,谢谢!
小弟,不懂BAT,求助大神帮助过滤拆分这段文本,谢谢!

我用“netsh interface show interface >d:\network.txt”

在输出文本中得到:

管理员状态     状态           类型             接口名称
------------------------------------------------------------------------
已启用            已连接            专用               本地连接
已禁用            已断开连接          专用               无线网络连接 2
已启用            已连接            专用               无线网络连接


————但,我只想在输出文本中仅仅保存几个接口名称即可,即分行输出:
本地连接
无线网络连接 2
无线网络连接


——————看似简单,但我实在弄不来,谢谢大神援手了!
作者: yangfengoo    时间: 2015-5-19 14:41

本帖最后由 yangfengoo 于 2015-5-19 17:51 编辑
  1. >d:\network.txt (for /f "skip=2 tokens=3* delims= " %%a in ('netsh interface show interface') do echo,%%b)
复制代码

作者: pcl_test    时间: 2015-5-19 15:11

  1. @(for /f "tokens=3*" %%a in ('netsh interface show interface^|more +2') do @echo,%%b)>"d:\network.txt"
复制代码

作者: gawk    时间: 2015-5-19 15:29

回复 2# yangfengoo


    “无线网络连接 2”有空格,tokens=4是不对的
作者: ygqiang    时间: 2015-5-19 18:09

pcl_test 发表于 2015-5-19 15:11



    netsh interface show interface>mac-win7.txt
netsh interface show interface>mac-xp.txt
  1. @(for /f "tokens=3*" %%a in ('netsh interface show interface^|more +2') do @echo,%%b)
复制代码
这个只能在win7系统下显示名称。。
xp系统下,不能显示?

如何弄成通用xp和win7系统的代码?
作者: locoman    时间: 2015-5-19 19:03

本帖最后由 locoman 于 2015-5-19 19:09 编辑

各位大神真热心,谢谢帮助。
以上各位写的代码都能有过滤成果,但是,还是有点没有完全达到标准要求:
各位代码输出的结果是:

D:\>echo,本地连接
本地连接

D:\>echo,无线网络连接
无线网络连接


----------------------
而我要的是,仅仅保留真实的接口名称,其余任何多余都不能要的,这样才方便二次使用。而各位的代码输出结果既有多余的部分,而且还有空行。我仅仅需要这样:谢谢再帮帮优化:-------------
本地连接
无线网络连接

作者: locoman    时间: 2015-5-19 19:21

本帖最后由 locoman 于 2015-5-19 19:22 编辑
pcl_test 发表于 2015-5-19 15:11


@(for /f "tokens=3*" %%a in ('netsh interface show interface^|more +2') do @echo,%%b)>"d:\network.txt"

这段代码,输出是标准要求的。
谢谢,再多找几个不同的系统测试后结贴。

作者: pcl_test    时间: 2015-5-19 19:48

回复 5# ygqiang
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('netsh interface show interface^|more +3') do (
  3. set "str=%%a"
  4. for /f "tokens=*" %%b in ("!str:~46!") do echo,%%b
  5. )
  6. pause
复制代码

作者: ygqiang    时间: 2015-5-19 23:32

回复  ygqiang
pcl_test 发表于 2015-5-19 19:48



    xp和win7系统都测试了。。。

xp系统下显示结果,还是有点小问题。。。
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('netsh interface show interface^|more +3') do (
  3. set "str=%%a"
  4. for /f "tokens=*" %%b in ("!str:~46!") do echo,%%b
  5. )
  6. pause
复制代码

作者: pcl_test    时间: 2015-5-19 23:44

本帖最后由 pcl_test 于 2015-5-19 23:48 编辑

回复 9# ygqiang

如果你所说的小问题是不想显示“环回”和“内部”,那么改为('netsh interface show interface^|find "连接"')
作者: ygqiang    时间: 2015-5-19 23:56

回复  ygqiang

如果你所说的小问题是不想显示“环回”和“内部”,那么改为('netsh interface show int ...
pcl_test 发表于 2015-5-19 23:44



    多谢。。好用了。。。
作者: locoman    时间: 2015-5-20 10:04

本帖最后由 locoman 于 2015-5-20 10:19 编辑

测试情况汇报:
一、
@(for /f "tokens=3*" %%a in ('netsh interface show interface^|more +2') do @echo,%%b)>"d:\network.txt"

1、在WIN7下测试正常
2、在WINXP测试不正常:
——该机器有两张有线网卡,网卡连接名分别为“内网”、“外网”。实际测试输出文本显示为:
输出的文本内容是空的,没有任何东西

二、
@echo off & setlocal enabledelayedexpansion
for /f "delims=" %%a in ('netsh interface show interface^|find "连接"') do (
set "str=%%a"
for /f "tokens=*" %%b in ("!str:~46!") do echo,%%b
)
pause

1、在WIN7下测试正常。
2、在WINXP下测试不正常:
——该机器有两张有线网卡,网卡连接名分别为“内网”、“外网”。实际测试输出文本显示为:
本地连接
请按任意键继续. . .

三、
@echo off & setlocal enabledelayedexpansion
for /f "delims=" %%a in ('netsh interface show interface^|more +3') do (
set "str=%%a"
for /f "tokens=*" %%b in ("!str:~46!") do echo,%%b
)
pause

1、在WIN7下测试正常。
2、在WINXP下测试不正常:
——该机器有两张有线网卡,网卡连接名分别为“内网”、“外网”。实际测试输出文本显示为:
内网
本地连接
外网
环回
内部
请按任意键继续. . .
-------------
需特别注意的是:该机器只有两张有线网卡,名称为“内网”、“外网”,怎么多了一个“本地连接”呢?——————


另:
------如果你所说的小问题是不想显示“环回”和“内部”,那么改为('netsh interface show interface^|find "连接"')----

————————
这样也是不可行的,上面的实例就说明问题了:客户机已将网卡名称修改为自己特有的名称:“内网”、“外网”。



——————呵呵,一个看似简单的问题,还有这么多的名堂,有劳各位大神了!!
作者: pcl_test    时间: 2015-5-20 10:22

本帖最后由 pcl_test 于 2015-5-21 17:50 编辑

回复 12# locoman
  1. @echo off & setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('netsh interface show interface^|findstr /rv "环回 内部"^|more +3') do (
  3. set "str=%%a"
  4. for /f "tokens=*" %%b in ("!str:~46!") do echo,%%b
  5. )
  6. pause
复制代码

作者: locoman    时间: 2015-5-21 14:39

回复  locoman
pcl_test 发表于 2015-5-20 10:22


13楼的代码测试情况汇报:

1、在WIN7中测试正常。

2、在WINXP中测试不正常:
该机实际上只有两张网卡,分别命名为“内网”、“外网”。测试输出的文件显示为:
内网
本地连接
外网
环回
内部
作者: pcl_test    时间: 2015-5-21 14:44

本帖最后由 pcl_test 于 2015-5-21 17:55 编辑

回复 14# locoman
xp   为何改名了还有本地连接???
1、命令提示符里运行该命令netsh interface show interface,截图发上来
2、右键网络邻居,属性,截图发上来
作者: ygqiang    时间: 2015-5-21 17:39

sdfalklsdlkjdslfk
作者: ygqiang    时间: 2015-5-21 17:39

回复 14# locoman
  1. @echo off & setlocal enabledelayedexpansion
  2. echo 获取网卡连接名 >nul 2>nul
  3. echo win7和xp系统,双网卡环境下,都好用 >nul 2>nul
  4. for /f "delims=" %%a in ('netsh interface show interface^|findstr /v "环回 内部"^|more +3') do (
  5. set "str=%%a"
  6. for /f "tokens=*" %%b in ("!str:~46!") do (
  7. if %%b NEQ 环回 if %%b NEQ 内部 echo,%%b
  8. )
  9. )
  10. pause >nul 2>nul
复制代码

作者: pcl_test    时间: 2015-5-21 17:54

回复 17# ygqiang

findstr /v "环回 内部"原本就是排除显示这两项的,改为findstr /iv "环回 内部"或是findstr /rv "环回 内部"即可,那么就不需要再次验证了,可去掉if %%b NEQ 环回 if %%b NEQ 内部
作者: locoman    时间: 2015-5-22 16:21

回复  locoman
ygqiang 发表于 2015-5-21 17:39


17楼测试汇报:
1、WIN7测试正常。
2.WINXP测试不正常:
内网
本地连接
外网

作者: locoman    时间: 2015-5-22 16:27

回复  locoman
xp   为何改名了还有本地连接???
1、命令提示符里运行该命令netsh interface show int ...
pcl_test 发表于 2015-5-21 14:44


一直在WINXP中测试结果不正常的机器情况:
作者: pcl_test    时间: 2015-5-22 16:47

回复 20# locoman
  1. @for /f "tokens=1*" %%a in ('systeminfo^|find "连接名"') do @echo;%%b
  2. @pause
复制代码

作者: locoman    时间: 2015-5-22 17:28

本帖最后由 locoman 于 2015-5-22 23:50 编辑
回复  locoman
pcl_test 发表于 2015-5-22 16:47


谢谢@pcl_test !谢谢您一直热心的、不愿其烦的研究、帮助!!

21楼这段代码,在WIN7和WINXP测试使用都能正常。

但是,这是使用的SYSTEMINFO命令,没有NETSH命令的效率高,运行时间要慢很多。

看来nertsh这个命令的鬼怪名堂多……不知是否对其有所突破……
是否可以去考虑问题:是不是WIN7和WINXP中的netsh命令本身有所不同,是否可以将WIN7的netsh命令拷贝到WINXP中运行看看
作者: pcl_test    时间: 2015-5-22 20:06

回复 22# locoman
没用XP很久;系统不同,有些命令确实是有区别的;试试用wmic nic get NetConnectionID,看看xp/win7显示效果是否一致




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2