我的批处理文件没有我想要的那么快

My batch file is not working as fast as I want

我想处理来自一个非常大的输入文件的数据并验证 3 列的值。它适用于小文件,但对于大文件它永远不会停止。文件的前两行无关紧要。我试着在第一个中回显一些东西,但即使在 20 分钟后,第二个值也没有显示。

@echo off
setlocal enableextensions enabledelayedexpansion
set inputFile=%1
set /a LineNumber=0
set ok=0
For /f " skip=1 tokens=6,7,8  delims= " %%b in (%inputfile%) do (
    set /a LineNumber+=1
    if "%%c"=="(" (
        set ok=0
        set /a FinalLineNumber=0
        for /f "skip=1 tokens=6,7,8  delims= " %%e in (%inputfile%) do (
            set /a FinalLineNumber+=1
            If "%%f"==")" (
                If "%%b"=="%%e" (
                    If "%%d"=="%%g" (
                        set ok=1
                    )
                )
            )
        )
        if "!ok!"=="0" (
            echo %%b %%d
       )
    )
)
endlocal

输入文件类似于:

Name Adress No Nr Pers Cy   St   Y
a    122    43 54  2   23   (   56
g    345    45 32  5   23   +   56
f     54    34 10  4   23   )   56
g     34    76  2  5   24   (   56

程序应该从 g 行回显 CyY,因为 St ) 不在文件中。 该文件具有以“(”开头并以“)”结尾的循环。我必须找到未正确使用的周期。一个循环由 CyY 定义。对于同一循环中的多个行,CyY 必须相同。

这是第一次尝试解决您的问题。对其进行测试并报告结果和所需的修改...

@echo off
setlocal EnableDelayedExpansion

set "inputFile=%~1"

for /F "skip=1 tokens=6,7,8" %%b in (%inputFile%) do (

   if "%%c" == "(" (

      rem Cycle begin
      if not defined cycle[%%b%%d] (
         set "cycle[%%b%%d]=("
      ) else (
         echo Cycle %%b %%d: start two times
      )

   ) else if "%%c" == ")" (

      rem Cycle ends
      if not defined cycle[%%b%%d] (
         echo Cycle %%b %%d: end with no start
      ) else (
         set "cycle[%%b%%d]="
      )

   )
)

for /F "tokens=2 delims=[]" %%b in ('set cycle[') do echo Cycle %%b: start with no end