0

複数の入力ファイルを処理し、それぞれに個別の出力ファイルを作成するバッチスクリプトがあります。ただし、私の問題は次のとおりです。

  1. 最初のテキストファイルのみを読み取ります
  2. 最初の出力ファイルを作成した後、無限ループに入ります。

入力ファイルごとに個別の出力ファイルを作成するためのスクリプトが必要です。どうすればこれを達成できますか?

コードは現在次のとおりです。

@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
4

1 に答える 1

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れて渡されます。これにより、すべてが再度ループするのが停止します。

于 2013-01-23T10:42:01.823 に答える