[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[网络连接] 批处理自动获取网络连接名称并判断开启和关闭状态并反向执行命令的求助

  1. @echo off
  2. set WLAN1=宽带连接
  3. set WLAN2=本地连接
  4. set WLAN3=连接 2
  5. set WLAN4=我的无线连接
  6. set WLAN5=我的无线连接 2
  7. for %%A in ("%WLAN1%" "%WLAN2%" "%WLAN3%" "%WLAN4%" "%WLAN5%") do call :foo %%A
  8. ::echo,&echo 请按任意键退出。
  9. pause>nul
  10. exit /b
  11. :foo
  12. netsh interface show interface %1 | find "已禁用" >nul 2>nul && (
  13.     netsh interface set interface %1 enable >nul 2>nul && (
  14.         echo %1 已启用
  15.     ) || (
  16.         echo %1 启用失败
  17.     )
  18. ) || (
  19.     netsh interface set interface %1 disabled >nul 2>nul && (
  20.         echo %1 已禁用
  21.     ) || (
  22.         echo %1 禁用失败
  23.     )
  24. )
  25. exit /b
复制代码
上面代码如何修改成运行后自动获取本电脑的全部网络连接名称,并判断是否开启状态,如果开启则关闭,如果关闭状态则执行开启命令。因为手工设置名称关键词不太分别,希望老师优化完善一下。

  1. @fltmc >nul || mshta vbscript:CreateObject("Shell.Application").ShellExecute("%~f0","%*",,"runas",1)(window.close) && exit /b
  2. @echo off
  3. for /f "tokens=1,2,3,* delims= " %%a in ('netsh interface show interface ^| find /i "连接"') do (
  4.   if "_%%a" EQU "_已禁用" (
  5.     echo "%%d" 状态是“已禁用”。下面启用:
  6.     netsh interface set interface "%%d" enable && (echo "%%d" 启用成功) || (echo "%%d" 启用失败)
  7.   )
  8.   if "_%%a" EQU "_已启用" (
  9.     echo "%%d" 状态是“已启用”。下面禁用:
  10.     netsh interface set interface "%%d" disable && (echo "%%d" 禁用成功) || (echo "%%d" 禁用失败)
  11.   )
  12.   echo -------------------------------------
  13. )
  14. pause
复制代码

TOP

第3行也可以改为
  1. for /f "skip=3 tokens=1,2,3,* delims= " %%a in ('netsh interface show interface') do (
复制代码

TOP

本帖最后由 aloha20200628 于 2024-5-1 11:02 编辑

回复 1# wh123wh123

以下批处理代码存为 test.bat,因其中涉及改变当前网络连接状态,须在管理员身份的CMD窗口中运行生效...
  1. @echo off
  2. for /f "tokens=1-3* delims= " %%1 in ('netsh interface show interface') do (
  3. if "%%1"=="已启用" (netsh interface set interface "%%4" DISABLED) else if "%%1"=="已禁用" (
  4. netsh interface set interface "%%4" ENABLED)
  5. )
  6. pause&exit/b
复制代码

TOP

回复 2# hnfeng


    'r' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'f' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
"%d" 状态是“已启用”。下面禁用:
'h' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
"%d" 禁用失败
-------------------------------------
请按任意键继续. . .

TOP

回复 4# aloha20200628



    请按任意键继续. . .
无效果,网络连接没任何变化

TOP

回复 3# hnfeng

不行

TOP

看上去有点像UTF8/ANSI的问题,但是确实不应该

TOP

回复 6# wh123wh123


    中文系统,把代码第三行的"%%1"=="enabled"和"%%1"=="disabled"
改为"%%1"=="已启用"和"%%1"=="已禁用"

TOP

本帖最后由 aloha20200628 于 2024-5-3 14:54 编辑

回复 6# wh123wh123

订正4楼代码如下,打开运行信息屏显和报错通道以便浏览各种反馈...
以下批处理代码存为 test.bat,因其中涉及改变当前网络连接状态,须在管理员身份的CMD窗口中运行生效...
根据netsh命令说明》以下代码可能对 ‘有线连接’ 的状态改变无效,换言之若线没插上怎么设都没用
  1. @echo off
  2. for /f "tokens=1-3* delims= " %%1 in ('netsh interface show interface') do (
  3. if "%%2"=="已连接" (netsh interface set interface "%%4" DISABLED DISCONNECTED) else if "%%2"=="已断开连接" (
  4. netsh interface set interface "%%4" ENABLED CONNECTED)
  5. )
  6. pause&exit/b
复制代码

TOP

回复 6# wh123wh123

已将4楼代码中的英文字面量更正为中文字面量(备注》源代码是在utf-8码页下测试成功的,故还原为简中码页936后应改回中文字面量即可);打开了运行信息屏显和报错通道以便浏览各种反馈。4楼与10楼两个版本均可一试...

TOP

回复 10# aloha20200628
还是不行

TOP

本帖最后由 aloha20200628 于 2024-5-1 18:01 编辑

回复 12# wh123wh123

运行期间有反馈信息吗?

TOP

回复 12# wh123wh123

依照微软官方文档的有关参数用法又订正了10楼代码。
查看了外网一些有关老帖,有报告说》脚本修改方法会因防火墙受阻...仅供参考

TOP

回复 12# wh123wh123


建议以后不要再说“不行”、“一闪而过”、“没有反应”之类的话,因为这对于想要给你进一步帮助的人来说没有任何意义。希望大家都能学会的一个知识点是:如何查看代码的报错信息。

请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表