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

ChatGPT4o 使用 ChatGPT 4o 回答

问题:

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

回答:

要实现这个功能,你可以使用Windows的批处理脚本(.bat文件)来完成。以下是一个示例脚本,它实现了你描述的功能:

@echo off
setlocal enabledelayedexpansion

:: 配置部分
set "log_dir=logs"
set "log_file_prefix=network_log"
set "log_file_size_limit=1048576"  :: 1MB in bytes
set "ping_target=8.8.8.8"          :: 目标IP地址
set "ping_interval=3"              :: Ping间隔时间(秒)
set "reconnect_interval=1"         :: 重连间隔时间(秒)

:: 创建日志目录
if not exist "%log_dir%" mkdir "%log_dir%"

:: 获取当前日志文件编号
set "log_file_index=1"
for /f "tokens=*" %%i in ('dir /b /a-d "%log_dir%\%log_file_prefix%*.log" 2^>nul') do (
    set "log_file_index=%%~ni"
    set /a log_file_index+=1
)

:main_loop
:: 生成当前日志文件名
set "log_file=%log_dir%\%log_file_prefix%!log_file_index!.log"

:: 检查日志文件大小
if exist "%log_file%" (
    for %%A in ("%log_file%") do (
        set "log_file_size=%%~zA"
    )
    if !log_file_size! geq %log_file_size_limit% (
        set /a log_file_index+=1
        set "log_file=%log_dir%\%log_file_prefix%!log_file_index!.log"
    )
)

:: 发送ping命令
ping -n 1 %ping_target% >nul
if !errorlevel! equ 0 (
    set "status=Success"
) else (
    set "status=Timeout"
)

:: 获取当前时间戳
for /f "tokens=1-3 delims=:.," %%a in ("%time%") do (
    set "timestamp=!date! %%a:%%b:%%c"
)

:: 记录日志并输出到屏幕
echo !timestamp! - Ping %ping_target%: !status! >> "%log_file%"
echo !timestamp! - Ping %ping_target%: !status!

:: 如果ping超时,检查WIFI状态
if "!status!"=="Timeout" (
    netsh wlan show interfaces | find "State" | find "connected" >nul
    if !errorlevel! equ 0 (
        echo !timestamp! - WIFI is connected, disconnecting... >> "%log_file%"
        echo !timestamp! - WIFI is connected, disconnecting...
        netsh wlan disconnect
        timeout /t %reconnect_interval% >nul
        echo !timestamp! - Reconnecting WIFI... >> "%log_file%"
        echo !timestamp! - Reconnecting WIFI...
        netsh wlan connect name="Your_Wifi_Name"
    ) else (
        echo !timestamp! - WIFI is disconnected, reconnecting... >> "%log_file%"
        echo !timestamp! - WIFI is disconnected, reconnecting...
        netsh wlan connect name="Your_Wifi_Name"
    )
)

:: 等待ping间隔时间
timeout /t %ping_interval% >nul

:: 循环
goto main_loop

说明:

  1. 配置部分:你可以在脚本的开头部分配置日志目录、日志文件前缀、日志文件大小限制、ping目标IP地址、ping间隔时间和重连间隔时间。
  2. 日志文件管理:脚本会检查当前日志文件的大小,如果超过1MB,则创建一个新的日志文件,文件名会递增。
  3. ping检测:每3秒钟发送一个ping包,如果ping成功,则记录日志并输出到屏幕;如果ping超时,则检查WIFI状态。
  4. WIFI状态管理:如果WIFI处于连接状态,则断开并重连;如果WIFI断开,则直接重连。
  5. 时间戳:每条日志记录都会带有时间戳。

注意事项:

  1. WIFI名称:请将脚本中的Your_Wifi_Name替换为你实际的WIFI名称。
  2. 权限:某些命令(如netsh wlan disconnectnetsh wlan connect)可能需要管理员权限运行脚本。
  3. 日志目录:确保脚本有权限在指定的日志目录中创建和写入文件。

将上述脚本保存为一个.bat文件,然后