批处理-Z字形合并两个文件



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

file1.txt
A
A
A

file2.txt
B
B
B

我想有作为输出:

output.txt
A
B
A
B
A
B

有人能告诉我哪种方法可能是批量完成这项工作最简单的方法吗(我被迫使用这种原生的windows语言)。非常感谢。

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

@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参数输出文件的内容,在每行的开头添加。因此,我们用delimeter :分割每个修改后的行,并将所有内容存储在:之后,如果该行以每次迭代后递增的当前行索引开始。因此,在"大"循环的第n次迭代后,!lineA!包含第一个文件的第n行,!lineB!包含第二个文件的第一行,这两行都被附加到output.txt。

您的过程被称为文件合并,最简单的方法是通过重定向输入读取第二个文件。这种方法甚至可以处理两个以上的输入文件,如本文或本文所述。

@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

最新更新