批处理 - 与两个文件合并的Zigzag

时间:2015-06-26 11:05:52

标签: windows batch-file merge

我想对两个文本文件进行曲折合并,如下所示。 我输入了两个文件:

file1.txt
A
A
A

file2.txt
B
B
B

我想输出:

output.txt
A
B
A
B
A
B

任何人都可以告诉我哪些可能是批量执行此操作的最简单方法(我被迫使用此本机Windows语言)。 谢谢!

2 个答案:

答案 0 :(得分:1)

如果我们可以假设两个文件中的行数相等,那么这将起作用:

@ECHO OFF
TYPE NUL>output.txt
SETLOCAL ENABLEDELAYEDEXPANSION
SET linecount=0

FOR /F %%i IN (file1.txt) DO SET /a linecount=!linecount!+1

FOR /L %%n IN (1,1,!linecount!) DO (
    FOR /f "tokens=1* delims=:" %%a in ('findstr /n .* "file1.txt"') DO (
        IF "%%a"=="%%n" SET lineA=%%b
    )
    FOR /f "tokens=1* delims=:" %%a in ('findstr /n .* "file2.txt"') DO (
        IF "%%a"=="%%n" SET lineB=%%b
    )
    ECHO !lineA! >> output.txt
    ECHO !lineB! >> output.txt
)

第一个FOR循环只计算file1.txt中的行。第二个循环遍历行数。两个内部循环都在file1.txt和file2.txt上执行命令findstr /n .* "fileX.txt"。 / n参数输出在每行开头添加的文件内容。因此,如果行以当前行索引开始,我们将每个修改后的行与分隔符:分开并存储:之后的所有行,该索引在每次交互后递增。所以在"大"的第n次迭代之后loop !lineA! contains包含第一个文件的第n行,!lineB!包含第二个文件的第n行,两行都附加到output.txt。

答案 1 :(得分:0)

您的流程称为文件合并,实现它的最简单方法是通过重定向输入读取第二个文件。此方法甚至适用于两个以上的输入文件,如this postthis one所述。

@echo off
setlocal EnableDelayedExpansion

rem Second file will be read from redirected input
< fileB.txt (

   rem First file will be read via FOR /F
   for /F "delims=" %%a in (fileA.txt) do (
      echo %%a
      rem Read and write next line from second file
      set /P lineB=
      echo !lineB!
   )

rem Send result to output file
) > output.txt