0

2 つのテキスト ファイルを .bat ファイルにマージするにはどうすればよいですか? または、少なくとも次の行を読み取る方法/.batファイルのファイルの終わりをテストする方法は?

.bat スクリプトを使用して 2 つのテキスト ファイルをマージすることはできますか? アイデアは、追加または連結ではなく、各行の内容に基づいてマージ操作を実行することです。簡単な例は、疑似コードのように、2 つのソート済みファイルからソート済みファイルを生成することです (次の行を読み取ってファイルの終わりをテストする方法を見つけることができないため、疑似ループ)

:TOP
 Set /p  Line1 Read_Line (file1)
:set /p  Line2 Read_Line (file2)
:TEST
 IF EOF(file1) GOTO  FINISH2
 IF EOF (file2) GOTO FINISH1
 IF  %Line1%  < %Line2% 
        (echo %Line1% - not in 2 >> File3
        set  /p Line1 =Read_Line (file1)
        GOTO TEST)
ELSE IF %Line1%  > %Line2% 
        (echo %Line2% - not in 1>> File3
        set  /p Line2=Read_Line (file2)
        GOTO TEST)
ELSE echo %Line1% in both >> File3
GOTO TOP
:FINISH1
echo %Line2% - not in 1>> File3
        set /p Line1=Read_Line (file1)
        IF NOT (EOF (File1)) 
                (echo %Line1% - not in 2 >> File3
                 GOTO FINISH1)
ELSE GOTO EOF
:FINISH2
           echo %Line2% - not in 1>> File3
        set /p Line2 =Read_Line (file2)
        IF NOT (EOF (File1) )
                (echo %Line2% - not in 1 >> File3
                 GOTO FINISH2)

for ループで試してみたのですが、ループ内で分岐するとループが止まるようです。set を使用してファイル内でカーソルを移動する方法を見つけるために、さまざまなこと(並列.batを含む)を試しました<が、正しい方法が見つかりません。

4

2 に答える 2

1

find2 つの手順 (手順 2 で新しいファイルをチェックし、データが見つからない場合にのみ何かを書き込むため、並べ替えは必要ありません):

  1. ファイルをマージします。
    copy file1.txt+file2.txt file3.txt

  2. 重複する行を削除します (/i大文字と小文字を区別し、ifFredFREDを省略して異なるものとして扱います):

    @echo off
    for /f "tokens=* delims=" %%a in (file3.txt) do (
      find /i "%%a" file4.txt>>nul&&rem
      if errorlevel 1 echo %%a>>file4.txt
      ) 
    

結果のファイルはfile4.txt

于 2012-07-02T18:08:08.107 に答える