|
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, 下载次数: 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 编辑 ] |
|