我想对两个文本文件进行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