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

Windows批处理定时检查文件大小并异常发邮件及脚本错误排查

解决批处理脚本错误并实现完整需求方案

一、修复原脚本的"else was unexpected"错误

原脚本的核心问题有两个:

  1. 变量赋值时引号嵌套错误:set "file="C:\CodeBases\DumpStack.log" 多了一个双引号,正确写法是set "file=C:\CodeBases\DumpStack.log"
  2. 未处理文件不存在的场景:如果目标文件不存在,size变量会未定义,直接触发if语句语法错误

修正后的基础检查脚本:

@echo off
setlocal enabledelayedexpansion
set "file=C:\CodeBases\DumpStack.log"
set MAXBYTESIZE=500000

:: 检查文件是否存在
if not exist "%file%" (
    echo 错误:文件 %file% 不存在
    pause
    exit /b 1
)

:: 获取文件大小
for %%A in ("%file%") do set /a size=%%~zA

:: 按需求判断:小于500KB则告警(原逻辑相反)
if !size! LSS !MAXBYTESIZE! (
    echo 告警:%file% 大小仅为 !size! 字节,小于500KB
) else (
    echo %file% 大小为 !size! 字节,符合要求
)

pause
endlocal

二、扩展实现完整需求

1. 支持接收文件名参数

脚本可通过命令行传入目标文件路径,比如运行checkfile.bat "C:\test\data.json"

2. 实现每30分钟自动检查

结合timeout命令实现循环等待,或使用Windows任务计划程序(更稳定)

3. 发送告警邮件到指定邮箱

采用PowerShell内置命令发送邮件,无需额外安装工具

完整脚本如下:

@echo off
setlocal enabledelayedexpansion

:: 检查是否传入文件名参数
if "%~1"=="" (
    echo 错误:请传入要检查的文件路径作为参数
    echo 示例:%~nx0 "C:\path\to\your\file.json"
    pause
    exit /b 1
)

set "file=%~1"
set MAXBYTESIZE=500000
set ALERT_EMAIL=abc@gmail.com
set CHECK_INTERVAL=1800  :: 30分钟=1800秒

:CHECK_LOOP
:: 检查文件是否存在
if not exist "!file!" (
    echo [!date! !time!] 错误:文件 !file! 不存在
    goto WAIT_NEXT_CHECK
)

:: 获取文件大小
for %%A in ("!file!") do set /a size=%%~zA

:: 判断是否需要发送告警
if !size! LSS !MAXBYTESIZE! (
    echo [!date! !time!] 告警:!file! 大小为 !size! 字节,小于500KB,正在发送邮件...
    :: PowerShell发送邮件(Gmail需开启两步验证并使用应用专用密码)
    powershell -Command "Send-MailMessage -To '!ALERT_EMAIL!' -From 'alert@yourdomain.com' -Subject '文件大小告警' -Body '文件:!file! 当前大小:!size! 字节,低于阈值500KB' -SmtpServer 'smtp.gmail.com' -Port 587 -UseSsl -Credential (New-Object System.Management.Automation.PSCredential('your-gmail-account@gmail.com', (ConvertTo-SecureString 'your-app-password' -AsPlainText -Force)))"
) else (
    echo [!date! !time!] !file! 大小为 !size! 字节,符合要求
)

:WAIT_NEXT_CHECK
echo 等待30分钟后再次检查...
timeout /t !CHECK_INTERVAL! /nobreak >nul
goto CHECK_LOOP

endlocal

关键说明

  • Gmail邮件配置:需开启账号两步验证,创建「应用专用密码」替代原密码使用,确保SMTP服务正常连接
  • 定时方案推荐:若需长期稳定运行,优先使用Windows任务计划程序,设置每30分钟执行一次脚本并传入文件参数,避免脚本挂起中断
  • 变量延迟扩展:启用setlocal enabledelayedexpansion并使用!变量!语法,避免循环中变量解析异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:25:27