我想对两个文本文件进行曲折合并,如下所示。 我输入了两个文件:
file1.txt
A
A
A
和
file2.txt
B
B
B
我想输出:
output.txt
A
B
A
B
A
B
任何人都可以告诉我哪些可能是批量执行此操作的最简单方法(我被迫使用此本机Windows语言)。 谢谢!
答案 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 post或this 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