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

如何编写批处理脚本遍历文本文件查找指定字符串并统计PASS/FAIL次数

批处理脚本实现水果名称关联的PASS/FAIL统计

问题描述

我有一个文本文件,希望编写一份批处理脚本,逐行遍历该文件以查找类似水果名称的字符串(例如橙子Oranges、苹果Apples)。每当找到目标字符串后,统计后续出现的PASS和FAIL次数;完成当前字符串的统计后,继续处理下一个目标字符串,直至文件末尾。最终需要将每个目标字符串及其对应的PASS、FAIL统计结果输出到一个输出文件中。

输入文件示例内容:

Some words
Some words
First string called Oranges
Some words
This line contains PASS
This line contains FAIL
This line contains PASS
This line contains FAIL
Some words
Second string called Apples
Some words
This line contains PASS
This line contains FAIL
This line contains FAIL
This line contains FAIL

期望输出文件内容:

Oranges, PASS COUNT 2, FAIL COUNT 2
Apples, PASS COUNT 1, FAIL COUNT 3

我目前仅能实现简单的字符串查找,但不知道如何在批处理脚本中实现条件判断和计数逻辑。我尝试的代码片段如下:

set findtext1="PASS:"
set findtext2="FAIL:"
set findfile="input.txt"
for /f "delims=" %%a in ('findstr %findtext1% %findfile%') do echo The full line of the string is %%a >> output.txt
for /f "delims=" %%a in ('findstr %findtext2% %findfile%') do echo The full line of the string is %%a >> output.txt

解决方案

下面是实现需求的完整批处理脚本,我会逐行拆解逻辑:

@echo off
setlocal enabledelayedexpansion

:: 定义输入输出文件路径,可根据实际情况修改
set "inputFile=input.txt"
set "outputFile=output.txt"

:: 初始化跟踪变量:当前统计的水果名、PASS/FAIL计数
set "currentFruit="
set "passCount=0"
set "failCount=0"

:: 先清空输出文件,避免残留旧数据
echo. > "%outputFile%"

:: 逐行读取输入文件内容,delims=保证整行读取(包含空格)
for /f "delims=" %%a in ('type "%inputFile%"') do (
    set "line=%%a"
    
    :: 检查当前行是否包含目标水果名(这里匹配Oranges和Apples,可自行扩展)
    echo !line! | findstr /i "Oranges Apples" >nul
    if not errorlevel 1 (
        :: 如果之前有正在统计的水果,先把结果写入输出文件
        if not "!currentFruit!"=="" (
            echo !currentFruit!, PASS COUNT !passCount!, FAIL COUNT !failCount! >> "%outputFile%"
        )
        :: 更新当前跟踪的水果名,并重置计数
        for %%b in (Oranges Apples) do (
            echo !line! | findstr /i "%%b" >nul
            if not errorlevel 1 (
                set "currentFruit=%%b"
                set "passCount=0"
                set "failCount=0"
            )
        )
    ) else (
        :: 检查当前行是否是PASS,是则计数+1
        echo !line! | findstr /i "PASS" >nul
        if not errorlevel 1 set /a passCount+=1
        
        :: 检查当前行是否是FAIL,是则计数+1
        echo !line! | findstr /i "FAIL" >nul
        if not errorlevel 1 set /a failCount+=1
    )
)

:: 文件遍历结束后,写入最后一个水果的统计结果(避免遗漏)
if not "!currentFruit!"=="" (
    echo !currentFruit!, PASS COUNT !passCount!, FAIL COUNT !failCount! >> "%outputFile%"
)

echo 统计完成!结果已保存到 %outputFile%
endlocal

关键逻辑说明

  • setlocal enabledelayedexpansion:必须启用延迟变量扩展,否则在for循环内部无法实时读取和更新变量值
  • 水果匹配判断:用findstr /i实现不区分大小写的匹配,如果你需要扩展更多水果,直接在Oranges Apples后面添加即可
  • 计数逻辑:每次找到新的水果名时,先把上一个水果的统计结果写入文件,再重置计数;非水果行则检查是否是PASS/FAIL并更新对应计数
  • 收尾处理:遍历结束后要单独处理最后一个水果的统计,因为没有下一个水果触发写入操作

使用步骤

  1. 将上述代码保存为fruitStats.bat
  2. 把input.txt放在和脚本同一目录(或者修改inputFile的绝对路径)
  3. 双击运行脚本,统计结果会自动生成到output.txt中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 02:47:32