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

如何优化Batch脚本提取大文件中关键词间内容

优化大文件下的Batch关键词内容提取脚本

原Batch脚本处理10万行以内的JSON格式文本文件时效率尚可,但处理566857行的大文件时速度极慢,需要优化以高效提取"name"与"caow"之间的内容,且必须保持Batch环境。

原脚本代码:

@ECHO OFF
SETLOCAL 

SET "sourcedir=%~dp0New folder 1"
SET "destdir=%~dp0New folder 2"

for /f "tokens=1 delims=[]" %%a in ('find /n "name"^<"%sourcedir%\nsb.txt" ') do set /a start=%%a
for /f "tokens=1 delims=[]" %%a in ('find /n "caow"^<"%sourcedir%\nsb.txt" ') do set /a end=%%a
(
for /f "tokens=1* delims=[]" %%a in ('find /n /v ""^<"%sourcedir%\nsb.txt" ') do (
 IF %%a geq %start% IF %%a leq %end% ECHO(%%b
 )
)>"%destdir%\(1).txt"
GOTO :EOF

优化后的脚本

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET "sourcedir=%~dp0New folder 1"
SET "destdir=%~dp0New folder 2"
SET "inFile=%sourcedir%\nsb.txt"
SET "outFile=%destdir%\(1).txt"

SET "outputFlag=0"

(
    FOR /F "usebackq delims=" %%L IN ("%inFile%") DO (
        REM 检测到"name"行,开启输出开关并输出该行
        IF "%%L"=="  \"name\": 6," (
            SET "outputFlag=1"
            ECHO(%%L
            GOTO :nextLine
        )
        REM 检测到"caow"行,输出该行后关闭开关并终止循环
        IF "%%L"=="  \"caow\": [" (
            ECHO(%%L
            SET "outputFlag=0"
            GOTO :exitLoop
        )
        REM 输出开关开启时,输出当前行
        IF !outputFlag! EQU 1 (
            ECHO(%%L
        )
        :nextLine
    )
    :exitLoop
) > "%outFile%"

ENDLOCAL
GOTO :EOF

优化说明

  • 减少文件遍历次数:原脚本需要三次读取整个大文件(两次查询行号、一次提取内容),优化后仅遍历一次,大幅降低IO开销。
  • 启用延迟扩展:通过ENABLEDELAYEDEXPANSION实现循环内变量的实时更新,精准控制输出开关的状态。
  • 精准匹配目标行:直接匹配"name"和"caow"所在的完整行(需根据实际文件格式调整匹配字符串),省去行号计算的额外消耗。
  • 提前终止循环:找到"caow"行后立即退出循环,无需处理后续无关内容,节省大量处理时间。

注意事项

如果目标文件中"name"或"caow"的行格式与示例片段不完全一致,需修改脚本中对应的匹配字符串,确保能准确触发输出开关的状态变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:35:15