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

[网络连接] 有没有佬能帮忙看看这个断网检测的BAT脚本?

写了个脚本,测试的时候很正常,但是真正断网的时候就G了,不知道哪里的原因,网卡名字也对上的

有大佬能帮忙看看吗,或者有没有自动识别当前联网的网卡进行检测的,电脑上还有vmwave的虚拟网卡,不知道能不能实现

主要就是持续检测网络,断网超过多少秒就重启网卡,重启几次无效的话就重启电脑
  1. @echo off
  2. REM 获取当前日期
  3. for /f "tokens=1-3 delims=/ " %%a in ('date /t') do (
  4.     set "datestamp=%%a-%%b-%%c"
  5. )
  6. REM 创建日志文件名
  7. set "alllogfile=D:\Ping\%datestamp%_network_check.log"
  8. set "rebootlogfile=D:\Ping\%datestamp%_reboot.log"
  9. REM 设置需要重启的网卡名称
  10. set INTERFACE_NAME=以太网
  11. REM 最大重启次数,默认重启3次网卡无效后重启电脑,根据自己需要更改下列数字,比重启次数大1即可
  12. set MAX_RESTART_COUNT=4
  13. REM 网络中断秒数
  14. set RESTART_INTERVAL=30
  15. REM 记录已经进行的网卡重启次数。初始值为1,每次网卡重启后递增。
  16. set /A RESTART_COUNT=1
  17. set /A DISCONNECTED_TIME=0
  18. set "STOP_FLAG="
  19. :START
  20. ping www.baidu.com -n 1 | findstr "TTL=" > nul
  21. if %errorlevel% neq 0 (
  22.     set /A DISCONNECTED_TIME+=1
  23.     if %DISCONNECTED_TIME% gtr %RESTART_INTERVAL% (
  24.         set /A RESTART_COUNT+=1
  25.         netsh interface set interface "%INTERFACE_NAME%" admin=disable > nul
  26.         timeout /t 5 > nul
  27.         netsh interface set interface "%INTERFACE_NAME%" admin=enable > nul
  28.         set DISCONNECTED_TIME=0
  29.         if %RESTART_COUNT% equ %MAX_RESTART_COUNT% (
  30.             echo %date% %time% - 网卡重启无效, 重启电脑. >> "%alllogfile%"
  31.             echo %date% %time% - 网卡重启无效, 重启电脑. >> "%rebootlogfile%"
  32.             shutdown /r /f /t 0
  33.             set "STOP_FLAG=1"   REM 设置停止标志
  34.             exit
  35.         ) else (
  36.             echo %date% %time% - %INTERFACE_NAME%网卡重启次数: 第 %RESTART_COUNT% 次 >> "%alllogfile%"
  37.             echo %date% %time% - %INTERFACE_NAME%网卡重启次数: 第 %RESTART_COUNT% 次 >> "%rebootlogfile%"
  38.         )
  39.     )
  40.     echo %date% %time% - 网络中断! >> "%alllogfile%"
  41. ) else (
  42.     set DISCONNECTED_TIME=0
  43. )
  44. timeout /t 1 > nul
  45. REM 检查停止标志
  46. if defined STOP_FLAG (
  47.     exit
  48. ) else (
  49.     goto :START
  50. )
复制代码

断网时的日志呢?一起发上来撒

如果看不出哪里的问题,再多加几行日志

比如33行和34行之间再加行
echo 禁用网卡 %errorlevel% >> "%alllogfile%"

QQ 20147578

TOP

回复 2# czjt1234




周五测试 生成的2024-01-26_network_check.log
然后周六休息 但是下午断网了,也没有生成27好的日志,直接写进26号的日志了

2024/01/27 周六 16:59:50.29 - 网络中断!
2024/01/27 周六 16:59:51.20 - 网络中断!
2024/01/27 周六 16:59:52.21 - 网络中断!
2024/01/27 周六 16:59:53.12 - 网络中断!
2024/01/27 周六 16:59:54.14 - 网络中断!
2024/01/27 周六 16:59:55.14 - 网络中断!

今天来上班发现电脑是关机状态,周末公司也没人来上班,是笔记本

TOP

本帖最后由 buyiyang 于 2024-1-29 15:12 编辑

明显的问题就是复合语句中没有用延迟变量,导致多个if判断和变量输出错误。

具体上,if %DISCONNECTED_TIME% gtr %RESTART_INTERVAL%判断一直为false,则只会执行后面的语句echo %date% %time% - 网络中断! >> "%alllogfile%"。

TOP

回复 4# buyiyang


    timeout /t 5 > nul

这个不是吗 - - gpt写的

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. REM 设置需要重启的网卡名称
  4. set INTERFACE_NAME=以太网
  5. REM 最大重启次数,默认重启3次网卡无效后重启电脑,根据自己需要更改下列数字,比重启次数大1即可
  6. set MAX_RESTART_COUNT=3
  7. REM 网络中断秒数
  8. set RESTART_INTERVAL=30
  9. REM 记录已经进行的网卡重启次数。初始值为0,每次网卡重启后递增。
  10. set /A RESTART_COUNT=0
  11. set /A DISCONNECTED_TIME=0
  12. :START
  13. ping www.baidu.com -n 1 | findstr "TTL=" > nul
  14. if %errorlevel% neq 0 (
  15. set /A DISCONNECTED_TIME+=1
  16. for /f %%i in ('powershell -c "Get-Date -uformat '%%Y%%m%%d'"') do (
  17. md "D:\Ping\" 2>nul
  18. set "alllogfile=D:\Ping\%%i_network_check.log"
  19. set "rebootlogfile=D:\Ping\%%i_reboot.log"
  20. )
  21. echo !date! !time! - 网络中断! >> "!alllogfile!"
  22. if !DISCONNECTED_TIME! gtr %RESTART_INTERVAL% (
  23. set /A RESTART_COUNT+=1
  24. netsh interface set interface "%INTERFACE_NAME%" admin=disable > nul
  25. timeout /t 5 > nul
  26. netsh interface set interface "%INTERFACE_NAME%" admin=enable > nul
  27. timeout /t 5 > nul
  28. echo !date! !time! - %INTERFACE_NAME%网卡重启次数: 第 !RESTART_COUNT! 次 >> "!alllogfile!"
  29. echo !date! !time! - %INTERFACE_NAME%网卡重启次数: 第 !RESTART_COUNT! 次 >> "!rebootlogfile!"
  30. ping www.baidu.com -n 1 | findstr "TTL=" > nul
  31. if !errorlevel! neq 0 (
  32. set /a RESTART_COUNT+=1
  33. if !RESTART_COUNT! equ %MAX_RESTART_COUNT% (
  34. echo !date! !time! - 网卡重启无效, 重启电脑. >> "!alllogfile!"
  35. echo !date! !time! - 网卡重启无效, 重启电脑. >> "!rebootlogfile!"
  36. shutdown /r /f /t 30
  37. exit
  38. )
  39. ) else (
  40. set /a DISCONNECTED_TIME=0,RESTART_COUNT=0
  41. )
  42. )
  43. ) else (
  44. set DISCONNECTED_TIME=0
  45. )
  46. timeout /t 1 > nul
  47. goto :START
复制代码
bat小白,请多指教!谢谢!

TOP

返回列表