无忧启动论坛

标题: 自动重新启动网卡的cmd [打印本页]

作者: dos时代菜鸟    时间: 2011-3-25 08:15
标题: 自动重新启动网卡的cmd
需要 devcon/ipconfig/find /for

利用 ipconfig + find 获取 网络设备名单
利用 for + devcon 将网络设备关闭再启动

在 xp /win7 中文下测试成功。

-----------------------------------------------------------------------
@echo off
title 重新启动网络设备
color 0a
echo.

ipconfig /all |find "描述"        >net_dev.txt
ipconfig /all |find "Description">>net_dev.txt

for /f "tokens=1,2 delims=:" %%x in (net_dev.txt) do (  
for /f "delims=& tokens=1,2" %%c in ('devcon find pci\*^|find  /i "%%y"') do (
  echo  正在 重新启动设备  "%%d"
  devcon disable *%%d* >nul
  devcon enable *%%d* >nul
)
)

if exist net_dev.txt del /q net_dev.txt
echo.
echo 完毕!

------------------------------------------------------------------------
作者: bank-w3000    时间: 2011-3-25 09:26
感谢分享,这个什么情况下需要用到啊。
作者: wang6610    时间: 2011-3-25 09:41
例如:adsl重新获得新ip等。。。。。。。。。。
作者: renchmin    时间: 2011-3-25 11:58
这个是在DOS下使用的吗。
作者: dos时代菜鸟    时间: 2011-3-25 12:36
再来一个不用  find  的。针对 以太网适配器。多个以太网适配器 同样适用。
编写这个脚本,主要是因为最近 单位 dhcp 路由器总调整 ,导致每次都要对各台电脑进行 网卡重启 实在麻烦,于是编辑这个东西,让同志们自行运行。我想这就是 脚本语言设计 的最初目的吧

需要  ipconfig/devcon

以太网适配器 英文名称叫 "Ethernet adapter" 考虑 xp/win7,xp下的ipconfig 输出为英文而且有非法字符(隐藏的回车符)所以需要分开处理。

通过 for 循环分析 ipconfig /all 命令结果,每分析一行 m增加一
当发现 某行第一个单词为 "以太网适配器" 或前两个单词为"Ethernet adapter" ,
既可以确定该行第二单词为适配器对应的网络连接名称,
其下方第三行一定是该适配器对应的网卡名称,
随即将 n 赋值为 m+2 ,将 l 赋值为该行第二单词,这其中 xp 的 ipconfig 输出信息中包含不规则隐藏的回车符以及":"都要在赋值 l 和 n  的时候考虑到,用 set l=!l:~x,y! 的方式调整一下。
当 m = n 的时候 说明for 循环已经进行到 包含网络适配器网卡名称的 行,此时通过 for 命令从该行获取 网卡名称并存入 net_drv.txt 中。

如果存在 net_drv.txt 文件,说明系统存在 以太网适配器。
通过 两个 for 循环 分别调用  devcon 和 net_dev.txt 的内容,找出net_dev.txt 中记载的以太网适配器 对应的 硬件ID 并通过 devcon 关闭/开启之。
最后删除  net_drv.txt

这个过程没有用到 find ,主要是为了演示 for /set 等指令在 cmd 中的应用。
可能用 powershell 或者 vbs 会更简单一些。


devcon 32位 以及脚本 重启网络设备.rar (16.03 KB, 下载次数: 358)


@echo off && setlocal ENABLEDELAYEDEXPANSION
title 重新启动 以太网适配器
color 0a
echo.
set m=0
set p=0
if exist net_dev.txt del /q net_dev.txt
for /f "tokens=1,2*" %%c in ('ipconfig /all') do (
set /a m=!m!+1
if %%c*==以太网适配器* (
   set /a n=!m!+2
   set l=%%d
   set l=!l:~0,-1!)
if %%c_%%d*==Ethernet_adapter* (
   set /a n=!m!+3
   set l=%%e
   set l=!l:~0,-3!
   )
if !m!==!n! (
  set /a p=!p!+1
  for /f "tokens=1* delims=:" %%x in ("%%c%%d%%e") do (echo !p!:!l!:%%y>>net_dev.txt)
)
)
for /f %%c in ("m n l p") do set %%c=

if exist net_dev.txt (
for /f "delims=: tokens=1*" %%c in ('devcon find pci\*') do (
    for /f "tokens=1,2* delims=:" %%x in (net_dev.txt) do (  
      if "%%d"=="%%z" (
        for /f "delims=& tokens=2" %%i in ("%%c") do (
      echo 正在重新启动 %%x.%%y:%%z
      devcon disable *%%i* >nul
      devcon enable  *%%i* >nul
       )
      )
     )
  )
del /q net_dev.txt
)
echo.
echo 指令运行完毕! 按任意键退出.... &&pause>nul



[ 本帖最后由 dos时代菜鸟 于 2011-3-25 13:34 编辑 ]
作者: peak8    时间: 2011-3-25 16:15
楼主水平着实了得啊!!
作者: sxp3468    时间: 2024-3-13 09:21
正好需要这个处理  谢谢
作者: papachi    时间: 2024-3-13 09:24
谢谢分享
作者: 紧急追踪    时间: 2024-3-15 22:23
如果能定时就更好了




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3