1

Позвольте мне начать с упоминания, что я новичок в этом программировании в пакетных файлах. Тем не менее, я хотел бы объединить два файла, и я начал со следующего кода:

copy Test1.sol + Test2.sol Test.sol /B

Этот код просто помещает содержимое Test2.sol внизу Test1.sol, что я не хочу делать. Вместо этого я хотел бы поместить содержимое Test2.sol в определенное место в Test1.sol.

Чтобы было понятнее. Допустим, что содержимое Test2.sol:

401 TEXT1  12345       123444
401 TEXT2  12345       123444
401 TEXT3  12345       123444

И содержание Test1.sol:

**********************
**     HEADER 1     **
**********************

Message1
Message2

**********************
**     HEADER 2     **
**********************

**********************
**     HEADER 3     **
**********************

Message3
Message4

Как я могу поместить содержимое Test1.sol в HEADER 2 в Test2.sol - как и другие сообщения?

Заранее спасибо!

2 ответа2

1

Существует "простое" однострочное решение с JREPL.BAT - утилита обработки текста поиска / замены в командной строке с регулярным выражением. JREPL.BAT - это чистый скрипт (гибридный пакет / JScript), который работает на любом компьютере под управлением Windows начиная с XP и не требует запуска exe-файла третьей стороны Полная документация доступна из командной строки через jrepl /? или jrepl /?? для постраничной помощи.

jrepl "^" "stdin.readAll()+'\r\n'" /j /inc "/^\*\*     HEADER 2     \*\*$//+3" /f test1.sol /o test.sol <test2.sol

Объяснение того, как это работает, работает в обратном направлении (вроде):

  • /f test1.sol Определяет основной входной файл.
  • /o test.sol Определяет выходной файл, который будет создан.
  • <test2.sol Предоставляет второй файл в качестве входных данных на стандартный ввод.
  • /inc "/...//+3" Указывает, что поиск / замена производится только в 3-й строке после
    Первая строка "Заголовок 2". Текст между косой чертой является регулярным выражением.
  • /j Указывает, что аргумент замены должен интерпретироваться как JScript.
  • "^" Аргумент find - это регулярное выражение, соответствующее началу строки.
  • "stdin..." Аргумент replace - это выражение JScript, которое оценивает все содержимое stdin (2-й файл) плюс дополнительный терминатор строки.
0

Лучше всего разбить файлы.

Если вы не хотите разбивать это, вам нужно много эха, как это

@echo off
@echo ********************** >results.txt
@echo **     HEADER 1     ** >>results.txt
@echo ********************** >>results.txt
type value1.txt >>results.txt

h1.txt

**********************
**     HEADER 1     **
**********************

Сообщение1

message2

h2.txt

**********************
**     HEADER 2     **
**********************

h3.txt

**********************
**     HEADER 3     **
**********************

Message3

Message4

type h1.txt >results.txt
type value1.txt >>results.txt
type h2.txt >results.txt
type value2.txt >>results.txt
type h3.txt >results.txt
type value3.txt >>results.txt

Очевидно, вы можете добавить столько разделов, сколько хотите. Единственный оставшийся трюк - это разделение исходного списка на отдельные файлы.

Не понятно, что идет под каждым заголовком, но я покажу пример.

find "401 " values.txt >values1.txt
find "402 " values.txt >values2.txt
find "403 " values.txt >values3.txt

Это может сработать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .