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

批处理脚本处理大文件校验列数据运行过慢无响应问题求助

批处理超大文件循环校验优化方案

性能瓶颈原因

原有脚本采用嵌套双循环设计:每遇到St列为(的行,就重新完整遍历一次整个输入文件,时间复杂度为O(n²)。当处理GB级大文件时,反复的磁盘IO和循环计算会导致程序长时间无响应,完全不适用大文件场景。

优化实现

优化思路:仅单次遍历文件,用环境变量作为哈希表维护待闭合的(Cy,Y)组合,遍历完成后直接输出未被闭合的组合即可,时间复杂度O(n),仅受磁盘读取速度限制,适配超大文件。

@echo off
setlocal enableextensions enabledelayedexpansion
:: 校验入参
if "%~1"=="" (
    echo 请传入输入文件路径作为参数
    exit /b 1
)
set "inputFile=%~1"
:: 清空历史遗留的open_前缀变量
for /f "delims==" %%a in ('set open_ 2^>nul') do set "%%a="

:: 单次遍历文件,跳过前2行
for /f "skip=2 tokens=6,7,8 delims= " %%b in (%inputFile%) do (
    set "Cy=%%b"
    set "St=%%c"
    set "Y=%%d"
    if "!St!"==")" (
        :: 遇到闭合标记,清除对应待闭合记录
        if defined open_!Cy!_!Y! (
            set "open_!Cy!_!Y!="
        )
    ) else if "!St!"=="(" (
        :: 遇到起始标记,新增待闭合记录
        set "open_!Cy!_!Y!=1"
    )
)

:: 输出所有未正确闭合的Cy、Y值
for /f "tokens=2,3 delims=_" %%x in ('set open_ 2^>nul') do (
    echo %%x %%y
)

endlocal

适配说明

  • 支持同一个(Cy,Y)组合存在多对开闭的场景,会自动匹配抵消,最终仅输出剩余未闭合的组合
  • 全程仅一次文件读取,无额外磁盘IO开销,处理大文件速度提升可达数千倍
  • 匹配你提供的示例输入,会正确输出24 56的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:24:03