Следующее хорошо работает из командной строки для большинства обстоятельств
(for %F in (test1.txt test2.txt) do @more +1 "%%F") >test3.txt
Удвойте проценты, если вы используете команду в пакетном скрипте.
Вышеуказанное имеет следующие ограничения
- Каждый исходный файл должен иметь менее 64 тыс. Строк, иначе он будет зависать.
- Любые символы табуляции будут преобразованы в строку пробелов
- Я думаю, что есть, по крайней мере, еще одно ограничение, но моя память не работает (возможно, нулевые байты преобразованы в новую строку ??)
Следующий пакетный скрипт не имеет ограничений, за исключением того, что длина каждой строки должна быть менее 8 КБ. Но это, вероятно, слишком медленно для больших файлов (пакет является паршивым инструментом для обработки текста):
@echo off
setlocal disableDelayedExpansion
>test3.txt (
for %%F in (test1.txt test2.txt) do for /f "skip=1 delims=" %%A in (
'findstr /n "^" "%%F"'
) do (
set "ln=%%A"
setlocal enableDelayedExpansion
echo(!ln:*:=!
endlocal
)
)
Вы могли бы написать собственный скрипт JScript или VB, который мог бы сделать это эффективно.
Моя гибридная утилита JScript/batch JREPL.BAT справится с этой задачей . Это излишне, но эффективно справится с работой даже с очень большими файлами.
JREPL.BAT - это текстовый процессор общего назначения с множеством опций. Это чистый скрипт, который запускается изначально на любой машине с Windows начиная с XP.
Следующее будет работать в командной строке.
>test3.txt (for %F in (test1.txt test2.txt) do @JREPL "^.*" "ln>1?$0:false" /jmatch /f "%F")
Если вы используете пакетный скрипт, вы должны использовать CALL JREPL и удвоить проценты:
@echo off
>test3.txt (for %%F in (test1.txt test2.txt) do call JREPL "^.*" "ln>1?$0:false" /jmatch /f "%%F")