我的批处理文件没有我想要的那么快
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
行回显 Cy
和 Y
,因为 St
)
不在文件中。
该文件具有以“(”开头并以“)”结尾的循环。我必须找到未正确使用的周期。一个循环由 Cy
和 Y
定义。对于同一循环中的多个行,Cy
和 Y
必须相同。
这是第一次尝试解决您的问题。对其进行测试并报告结果和所需的修改...
@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
我想处理来自一个非常大的输入文件的数据并验证 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
行回显 Cy
和 Y
,因为 St
)
不在文件中。
该文件具有以“(”开头并以“)”结尾的循环。我必须找到未正确使用的周期。一个循环由 Cy
和 Y
定义。对于同一循环中的多个行,Cy
和 Y
必须相同。
这是第一次尝试解决您的问题。对其进行测试并报告结果和所需的修改...
@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