如何编写批处理脚本实现网卡的一键启用/禁用(根据当前状态自动切换)
如何编写批处理脚本实现网卡的一键启用/禁用(根据当前状态自动切换)
我懂你想要的是那种能自动识别网卡当前状态,一键切换启用/禁用的批处理脚本——之前试的两个脚本要么只启用不禁用,要么判断逻辑出问题,确实挺闹心的。我来帮你排查问题,给你调整好能用的版本。
首先看你第一个用wmic的脚本,问题出在判断条件上:你用FormFactor|find "2"来判断状态,但FormFactor=2其实是指设备的外形类型(比如PCI卡),和网卡是否启用完全没关系,这就导致你的判断逻辑从根上错了,自然没法正确切换禁用状态。
修正后的WMIC版本脚本
直接查询网卡的Enabled属性来判断状态,这才是正确的姿势:
@echo off set "nicName=Realtek Gaming GbE Family Controller" :: 查询网卡是否已启用 wmic path Win32_NetworkAdapter where "Name='%nicName%'" get Enabled | find "True" >nul && goto :disable || goto :enable :disable echo 正在禁用网卡... wmic path Win32_NetworkAdapter where "Name='%nicName%'" call Disable goto :eof :enable echo 正在启用网卡... wmic path Win32_NetworkAdapter where "Name='%nicName%'" call Enable goto :eof
说明:这里直接检查Win32_NetworkAdapter的Enabled属性,True表示已启用,False表示禁用,判断逻辑就准确了。
再看你第二个用devcon的脚本,问题出在for /f提取状态的方式上:当网卡启用时,devcon status *DEV_8168的输出格式可能和你预期的不一样,导致tokens=3抓不到“running”这个值,自然没法触发禁用逻辑。
修正后的DEVCON版本脚本
换一种方式判断状态,直接用findstr匹配输出里的关键词:
@echo off set "devID=*DEV_8168" :: 检查设备是否处于运行状态 devcon status %devID% | findstr /i "running" >nul && goto :disable :: 走到这里说明设备是禁用状态,执行启用 echo 正在启用网卡... devcon enable %devID% goto :eof :disable echo 正在禁用网卡... devcon disable %devID% goto :eof
说明:用findstr /i "running"来检查输出里是否包含“running”(忽略大小写),如果有就说明已启用,执行禁用;否则执行启用,这样就避开了提取tokens的坑。
最后提醒一下:不管用哪个脚本,都需要以管理员身份运行,否则会有权限问题导致操作失败哦。
备注:内容来源于stack exchange,提问作者user2048695
相关产品推荐
相关产品推荐

