You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

批量重复检查批处理代码优化:如何提升运行效率

嘿,这个问题我太熟了!频繁创建删除文件导致的延迟,本质是磁盘IO远慢于内存操作——每次写文件都要等磁盘响应,次数多了自然卡。咱们直接把查重逻辑搬到内存里,彻底摆脱频繁文件操作的拖累,效率能提升一大截!

核心优化思路

把所有已出现的条目存在内存变量里,用字符串匹配来查重,只在最后一次性写入结果文件,全程几乎不碰磁盘(除了最终输出)。

优化后的完整代码(适配你的攻击者名单场景)

@echo off
SETLOCAL EnableDelayedExpansion

:: 用特殊分隔符(|)初始化已处理条目存储,避免部分匹配错误(比如"Doc"和"Doctor")
set "seen_entries=|"

:: 遍历你的攻击者名单,内存里直接查重
for %%a in (Vigil Ela Lesion Mira Echo Caviera Valkyrie Frost Mute Smoke Castle Pulse Doc Rook Jager Bandit Tachanka Kapkan) do (
    :: 检查当前条目是否已存在
    echo !seen_entries! | findstr /C:"|%%a|" >nul
    if errorlevel 1 (
        :: 不存在就加入已处理列表
        set "seen_entries=!seen_entries!%%a|"
        :: 先把内容攒着,或者直接写入文件(这里直接写也没压力,因为只追加一次)
        echo %%a >> unique_attackers.txt
    )
)

:: 如果需要排序(可选),最后统一处理一次文件
sort unique_attackers.txt > temp_sorted.txt
del unique_attackers.txt
ren temp_sorted.txt unique_attackers.txt

echo 去重完成!
ENDLOCAL

为什么这比原代码快?

  • 内存查重替代文件查重:原代码每次循环都要读写临时文件,现在直接在seen_entries变量里做字符串匹配,速度快几个数量级
  • 减少磁盘操作次数:只有最后写入结果(和可选的排序)会碰磁盘,没有频繁的创建/删除/追加操作
  • 避免不必要的跳转:去掉了冗余的goto :start,流程更线性,减少脚本内部的跳转开销

额外优化技巧(如果处理外部文本文件)

要是你是处理外部文本里的重复行,还可以把整个文件读进内存再处理,彻底告别逐行读写:

@echo off
SETLOCAL EnableDelayedExpansion

set "seen=|"
set "result="

:: 读取输入文件的每一行
for /f "delims=" %%a in (input.txt) do (
    echo !seen! | findstr /C:"|%%a|" >nul
    if errorlevel 1 (
        set "seen=!seen!%%a|"
        set "result=!result!%%a\n"
    )
)

:: 一次性写入结果(用powershell处理换行更准确,纯批处理也可以用循环输出)
powershell -Command "Write-Output '%result:\n=`n%'" > output.txt

ENDLOCAL

这样改完,你会发现延迟几乎消失——毕竟内存操作和磁盘操作的速度差真的太大了!

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

火山引擎 最新活动