Board logo

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

作者: wh123wh123    时间: 2024-4-30 12:12     标题: 批处理自动获取网络连接名称并判断开启和关闭状态并反向执行命令的求助

  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
复制代码
上面代码如何修改成运行后自动获取本电脑的全部网络连接名称,并判断是否开启状态,如果开启则关闭,如果关闭状态则执行开启命令。因为手工设置名称关键词不太分别,希望老师优化完善一下。
作者: hnfeng    时间: 2024-4-30 14:56

  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
复制代码

作者: hnfeng    时间: 2024-4-30 15:20

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

作者: aloha20200628    时间: 2024-4-30 18:52

本帖最后由 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
复制代码

作者: wh123wh123    时间: 2024-5-1 01:08

回复 2# hnfeng


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

回复 4# aloha20200628



    请按任意键继续. . .
无效果,网络连接没任何变化
作者: wh123wh123    时间: 2024-5-1 01:17

回复 3# hnfeng

不行
作者: hnfeng    时间: 2024-5-1 09:44

看上去有点像UTF8/ANSI的问题,但是确实不应该
作者: ppll2030    时间: 2024-5-1 10:17

回复 6# wh123wh123


    中文系统,把代码第三行的"%%1"=="enabled"和"%%1"=="disabled"
改为"%%1"=="已启用"和"%%1"=="已禁用"
作者: aloha20200628    时间: 2024-5-1 10:52

本帖最后由 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
复制代码

作者: aloha20200628    时间: 2024-5-1 11:21

回复 6# wh123wh123

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

作者: wh123wh123    时间: 2024-5-1 15:44

回复 10# aloha20200628
还是不行
作者: aloha20200628    时间: 2024-5-1 18:00

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

回复 12# wh123wh123

运行期间有反馈信息吗?

作者: aloha20200628    时间: 2024-5-3 15:03

回复 12# wh123wh123

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

作者: Batcher    时间: 2024-5-3 15:33

回复 12# wh123wh123


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

请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2