Windows脚本:使用ping命令检测网络并管理WIFI连接

ChatGPT4o 使用 ChatGPT 4o 回答

问题:

写一个Windows脚本,用ping命令检测网络通断状态, 1,每3秒钟发送一个ping包,如果ping成功,则循环ping检测 2,如果ping超时,查询WIFI连接状态,如果网卡处于连接状态,则发送断开指令,间隔1秒重连;如果WIFI断连,则发送重连指令 3,循环以上动作 4,打印添加时间戳,并将日志保存到日志文件,限制日志文件大小为1M,数字递增命名日志文件

回答:

以下是一个Windows批处理脚本,用于实现你描述的功能。这个脚本会每3秒钟发送一个ping包,如果ping超时,则检查WIFI连接状态并进行相应的操作。日志文件会带有时间戳,并且限制大小为1M,超过1M时会创建新的日志文件。

@echo off
setlocal enabledelayedexpansion

:: 配置部分
set "pingAddress=8.8.8.8"  :: 目标地址,可以修改为你需要的地址
set "logFileBase=network_log"  :: 日志文件基础名称
set "logFileExt=.txt"  :: 日志文件扩展名
set "maxLogSize=1048576"  :: 最大日志文件大小(1M = 1048576字节)
set "wifiInterfaceName=Wi-Fi"  :: WIFI接口名称,请根据实际情况修改

:: 初始化日志文件计数
set "logFileIndex=1"
set "logFile=%logFileBase%_%logFileIndex%%logFileExt%"

:check_log_size
:: 检查日志文件大小
if exist "%logFile%" (
    for %%A in ("%logFile%") do (
        set "logFileSize=%%~zA"
    )
    if !logFileSize! GEQ %maxLogSize% (
        set /a logFileIndex+=1
        set "logFile=%logFileBase%_%logFileIndex%%logFileExt%"
    )
)

:ping_loop
:: 发送ping包
ping -n 1 %pingAddress% >nul
if errorlevel 1 (
    :: ping超时,检查WIFI状态
    netsh wlan show interfaces | findstr /i "State" | findstr /i "connected" >nul
    if errorlevel 1 (
        :: WIFI断连,尝试重连
        echo [%date% %time%] WIFI disconnected, attempting to reconnect... >> %logFile%
        netsh wlan connect name=%wifiInterfaceName%
    ) else (
        :: WIFI连接但ping超时,断开并重连
        echo [%date% %time%] WIFI connected but ping timeout, reconnecting... >> %logFile%
        netsh wlan disconnect
        timeout /t 1 >nul
        netsh wlan connect name=%wifiInterfaceName%
    )
) else (
    :: ping成功
    echo [%date% %time%] Network is up >> %logFile%
)

:: 等待3秒
timeout /t 3 >nul

:: 检查日志文件大小
goto check_log_size

:: 循环
goto ping_loop

说明:

  1. pingAddress: 目标ping地址,可以修改为你需要的地址。
  2. logFileBase: 日志文件的基础名称。
  3. logFileExt: 日志文件的扩展名。
  4. maxLogSize: 最大日志文件大小,单位为字节(1M = 1048576字节)。
  5. wifiInterfaceName: WIFI接口名称,请根据实际情况修改。

使用方法:

  1. 将上述代码保存为一个批处理文件,例如network_check.bat
  2. 以管理员身份运行该批处理文件。

该脚本会持续运行,直到手动终止。它会每3秒钟发送一个ping包,并根据ping结果和W