|  | 
5#
 
 
 楼主|
发表于 2011-3-25 12:36:33
|
只看该作者 
| 再来一个不用  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, 下载次数: 362) 
 
 @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 编辑 ]
 | 
 |