Мы можем загрузить содержимое файлов в переменные массивы Batch, чтобы к каждой из его строк можно было обращаться напрямую любым удобным вам способом:
@echo off
setlocal EnableDelayedExpansion
rem Load first file into A1 array:
set i=0
for /F "delims=" %%a in (A1.txt) do (
set /A i+=1
set A1[!i!]=%%a
)
rem Load second file into A2 array:
set i=0
for /F "delims=" %%a in (A2.txt) do (
set /A i+=1
set A2[!i!]=%%a
)
rem At this point, the number of lines is in %i% variable
rem Merge data from both files and create the third one:
for /L %%i in (1,1,%i%) do echo !A1[%%i]! is from !A2[%%i]!>> A3.txt
РЕДАКТИРОВАТЬ Альтернативное решение
Есть еще один способ сделать это, не используя переменные пакета, поэтому его можно использовать для файлов любого размера, хотя он и медленнее. Я заимствовал метод, используемый Энди Моррисом в своем решении: 1- Вставить номера строк в оба файла, 2- Объединить оба файла в один, 3- Сортировать объединенный файл и 4- Объединить группы строк в одну и ту же строку. Ниже приведена программа Энди с несколькими небольшими модификациями, которые сделали ее быстрее (с исправленной незначительной ошибкой).
@echo off
setlocal EnableDelayedExpansion
call :AddLineNumbers A1.txt A > Both.txt
call :AddLineNumbers A2.txt B >> Both.txt
sort Both.txt /O Sorted.txt
echo EOF: >> Sorted.txt
call :creatNewLines < Sorted.txt > Result.txt
goto :eof
:AddLineNumbers
findstr /n ^^ %1 > tem.tmp
for /f "tokens=1* delims=:" %%a in (tem.tmp) do (
set /a lineNo=1000000+%%a
echo !lineNo!%2:%%b
)
goto :eof
:creatNewLines
set /p lineA1=
for /f "tokens=1* delims=:" %%a in ("%lineA1%") do (
if %%a == EOF goto :eof
set /p dummy=%%b< nul
)
set /p lineA2=
for /f "tokens=1* delims=:" %%a in ("%lineA2%") do echo is from %%b
goto creatNewLines
Строки порядка команд SORT в зависимости от их содержимого. Оригинальный метод Энди может потерпеть неудачу, потому что после номера строки строки упорядочены на основе содержимого строки, поэтому строки каждого файла могут быть смещены. В этом методе после номера строки добавляется дополнительный символ (A или B), поэтому строки каждого файла всегда располагаются в нужном месте.