Пакетная команда для добавления некоторой информации в несколько файлов в папке - PullRequest
0 голосов
/ 14 октября 2018

Я искал ответ в течение нескольких дней, но безуспешно, так как я был новичком в пакетных командах.

Моя папка содержит несколько текстовых файлов.Я хотел бы добавить несколько строк, которые все приходят из другого текстового файла.Поскольку текстовые файлы не соответствуют шаблону, я буду использовать номера строк.Например,

Мой основной входной текстовый файл содержит эти строки соответственно.

This is explanation.
This one is another line.
That is a short content.

Я хотел бы добавить эти строки выше во все текстовые файлы в моей папке, основываясь на определенныхстроки (например, 3,7 и 9, это может быть изменено позже) Это один из этих файлов:

My file contains
Too many lines
This is a line
This one is another line
It goes on
Another sample
Another line
One more
Another more

После добавления 3,7,9 соответственно из основного входного файла

My file contains
Too many lines
This is explanation. <---- 3 goes here without deleting any line
This is a line
This one is another line
It goes on
Another sample
This one is another line. <---- 7 goes here
Another line
One more
That is a short content. <---- 9 goes here
Another more

Я пытался сделать это с помощью Regex и Macro Record.Это может быть хорошо с Notepad ++ Macro Records.Тем не менее, я хотел бы, чтобы это было сделано с командным файлом.Заранее спасибо.

1 Ответ

0 голосов
/ 14 октября 2018

Я обычно игнорирую вопросы, которые не показывают никаких усилий со стороны ОП для написания кода.Однако я делаю исключение в этом случае, потому что решение включает в себя не очень простую концепцию (объединение файлов).

@echo off
setlocal EnableDelayedExpansion

set "lines=3 7 9"

rem Initialize first line number to search
for /F "tokens=1*" %%i in ("%lines%") do (
   set "line=%%i"
   set "lines=%%j"
)

rem Redirect the input to *read* lines via SET /P command from input.txt file
< input.txt (

   rem Process the text file. Use FINDSTR /N command to numerate the lines in %%a
   for /F "tokens=1* delims=:" %%a in ('findstr /N "^" test.txt') do (

      if "%%a" equ "!line!" (

         rem Read next line from input.txt and output it
         set /P "nextLine="
         echo !nextLine!

         rem Get the next line number to search
         for /F "tokens=1*" %%i in ("!lines!") do (
            set "line=%%i"
            set "lines=%%j"
         )

      )

      rem Output the original line
      echo %%b
   )
)

test.txt:

My file contains
Too many lines
This is a line
This one is another line
It goes on
Another sample
Another line
One more
Another more

input.txt:

This is explanation.
This one is another line.
That is a short content.

Вывод:

My file contains
Too many lines
This is explanation.
This is a line
This one is another line
It goes on
Another sample
This one is another line.
Another line
One more
That is a short content.
Another more

Это решение просто обрабатывает один текстовый файл, поэтому вам необходимо расширить метод для обработкинесколько файлов.Обратите внимание, что вы должны повторить весь процесс с каждым отдельным текстовым файлом ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...