You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Batch脚本Errorlevel代码问题求助:校园网络与网站故障检测脚本编写

帮你搞定Batch脚本里的Errorlevel问题

嘿,作为Batch新手能自己动手写网络检测脚本已经超棒啦!针对你遇到的Errorlevel相关问题,我结合你的场景(区分网络故障和网站故障)来给你梳理清楚,还附上实用的示例代码~

先搞懂Batch里的Errorlevel

Batch里每个命令执行后都会返回一个Errorlevel值:

  • 通常0代表命令执行成功
  • 非0值代表执行失败,但不同命令的Errorlevel含义可能有差异(比如ping在部分丢包时可能仍返回0,这点要注意)

针对你的需求,我们可以通过分层检测来区分「网络链路问题」和「网站服务问题」:先检测网关连通性(判断本地到网络出口是否正常),再检测校内网站的可用性(判断网站服务是否正常)。

示例脚本:区分网络/网站故障

基础版(用ping和curl)

@echo off
setlocal enabledelayedexpansion

:: 替换成你学校的网关IP和校内网站域名
set "SCHOOL_GATEWAY=192.168.0.1"
set "SCHOOL_WEBSITE=http://your-school-site.edu.cn"

echo === 开始检测学校网络 ===
echo 1. 检测网关连通性...
ping -n 4 %SCHOOL_GATEWAY% >nul

:: 判断ping的执行结果
if %errorlevel% equ 0 (
    echo    网关连通正常!
    echo 2. 检测校内网站可用性...
    :: 用curl静默请求网站,隐藏输出
    curl -s %SCHOOL_WEBSITE% >nul
    :: 嵌套判断时要用!errorlevel!(因为开启了延迟扩展)
    if !errorlevel! equ 0 (
        echo    网站访问正常,网络无故障!
    ) else (
        echo    网站无法访问,故障可能是网站服务异常!
    )
) else (
    echo    网关无法连通,网络链路可能中断!
)

pause
endlocal

进阶版(用PowerShell更准确判断网站状态)

如果你的系统没有curl,或者想更精准判断网站状态(比如HTTP状态码),可以用Windows自带的PowerShell:

@echo off
setlocal enabledelayedexpansion

set "SCHOOL_GATEWAY=192.168.0.1"
set "SCHOOL_WEBSITE=http://your-school-site.edu.cn"

echo === 开始检测学校网络 ===
echo 1. 检测网关连通性...
ping -n 4 %SCHOOL_GATEWAY% >nul

if %errorlevel% equ 0 (
    echo    网关连通正常!
    echo 2. 检测校内网站状态...
    :: 用PowerShell获取网站HTTP状态码,执行失败时返回0以外的值
    powershell -Command "$resp = Invoke-WebRequest -Uri '%SCHOOL_WEBSITE%' -UseBasicParsing -ErrorAction SilentlyContinue; exit ($resp.StatusCode -eq 200 ? 0 : 1)"
    
    if !errorlevel! equ 0 (
        echo    网站访问正常(HTTP 200),网络无故障!
    ) else (
        echo    网站访问异常,故障可能是网站服务问题!
    )
) else (
    echo    网关无法连通,网络链路可能中断!
)

pause
endlocal

关键注意点

  1. 延迟扩展(enabledelayedexpansion):当在if/for的代码块({})里嵌套判断Errorlevel时,必须开启延迟扩展,并用!errorlevel!代替%errorlevel%——因为%errorlevel%是脚本解析时就固定值,而!errorlevel!会在执行时实时获取最新的错误码。
  2. ping的小坑:如果只是丢了几个包但不是全丢,ping可能仍返回0。如果要更严格判断,可以解析ping的输出,比如查找Lost = 0来确认100%连通:
    ping -n 4 %SCHOOL_GATEWAY% | findstr /i "Lost = 0" >nul
    if %errorlevel% equ 0 (
        echo 网关100%连通
    )
    
  3. 自定义Errorlevel:你也可以用exit /b [数字]在自己的脚本片段里返回自定义错误码,方便后续判断。

如果你的现有代码有特定的逻辑,也可以贴出来,我帮你针对性调整Errorlevel的判断部分~

内容的提问来源于stack exchange,提问作者jim shorts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:35:45