处理多个.txt文件的批处理脚本只处理一个

时间:2013-01-23 06:44:46

标签: batch-file

我有一个批处理脚本,它应该处理多个输入文件,并为每个文件创建一个单独的输出文件。但是,我的问题是:

  1. 它只读取第一个文本文件
  2. 创建第一个输出文件后进入无限循环。
  3. 我需要脚本为每个输入文件创建一个单独的输出文件。我怎样才能做到这一点?

    目前代码如下:

    @echo off
    setlocal enabledelayedexpansion
    set line=0
    for /r %%x in (*.txt) do (                     //SUPPOSED to read all input files
    for /f "tokens=4 delims=|" %%a in (%%x) do (... goto: GETLINE))
    
    :GETLINE
    if not %line%==0 set skip=skip=%line%
    for %%x in (*.txt) do ( ...
    echo %%b >>"Output_%%x.txt"                           //writing into output
    goto :BREAK
    ))
    :BREAK
    

1 个答案:

答案 0 :(得分:1)

我认为问题出在:GETLINE函数中。

如果调用它,则会再次循环遍历所有文件,并再次读取每一行。

尝试使用此代替

@echo off
setlocal enabledelayedexpansion
set line=0
for /r %%x in (*.txt) do (
for /f "tokens=4 delims=|" %%a in (%%x) do (
set num=%%a
set num=!num: =!
if !num!==589 set bool=true
if !num!==581 set bool=true
if !num!==580 set bool=true
if !num!==027 set bool=true
if !num!==582 set bool=true
if !num!==585 set bool=true
if "!bool!"=="true" call :GETLINE "%%x"
set /a line+=1
set bool=false
)
)

:GETLINE
if not %line%==0 set skip=skip=%line%
for /f "usebackq %skip% tokens=* delims=" %%b in ("%~1") do (
echo %%b >>"Output_%%x.txt"
goto :BREAK
)
)
:BREAK

将调用:GETLINE并将其传递给循环中的当前文件,这将阻止它再次循环所有文件。