Добавление новой строки в текстовый файл с помощью пакетного файла Windows

у меня есть текстовый файл, в котором более 200 строк, и я просто хочу добавить новую строку перед строкой 4. Я использую Windows XP.

пример текстового файла перед вводом:

header 1
header 2
header 3
details 1
details 2

после выхода:

header 1
header 2
header 3
<----- This is new line ---->
details 1
details 2

4 ответов


Я считаю, что вы используете

echo Text >> Example.txt 

Вы можете использовать:

type text1.txt >> combine.txt
echo >> combine.txt
type text2.txt >> combine.txt

или что-то вроде этого:

echo blah >> combine.txt
echo blah2 >> combine.txt
echo >> combine.txt
echo other >> combine.txt

отказ от ответственности: приведенное ниже решение не сохраняет конечные вкладки.


Если вы знаете точное количество строк в текстовом файле, попробуйте следующий метод:

@ECHO OFF
SET origfile=original file
SET tempfile=temporary file
SET insertbefore=4
SET totallines=200
<%origfile% (FOR /L %%i IN (1,1,%totallines%) DO (
  SETLOCAL EnableDelayedExpansion
  SET /P L=
  IF %%i==%insertbefore% ECHO(
  ECHO(!L!
  ENDLOCAL
)
) >%tempfile%
COPY /Y %tempfile% %origfile% >NUL
DEL %tempfile%

цикл чтения строк из исходного файла и выводит их. Вывод перенаправляется во временный файл. При достижении определенной строки перед ней выводится пустая строка.

после завершения исходный файл удаляется, а временный присваивается оригинальное имя.


обновление

Если количество строк неизвестно заранее, вы можете использовать следующий метод для его получения:

FOR /F %%C IN ('FIND /C /V "" ^<%origfile%') DO SET totallines=%%C

(эта строка просто заменяет SET totallines=200 строка в приведенном выше сценарии.)

метод имеет один маленький недостаток: если файл заканчивается пустой строкой, то результатом будет фактическое число строк минус один. Если вам нужен обходной путь (или просто хотите играть в безопасность), вы можете использовать метод, описанный в ответ.


Предположим, вы хотите вставить определенную строку текста (а не пустую строку):

@echo off
FOR /F %%C IN ('FIND /C /V "" ^<%origfile%') DO SET totallines=%%C
set /a totallines+=1

@echo off
<%origfile% (FOR /L %%i IN (1,1,%totallines%) DO (
  SETLOCAL EnableDelayedExpansion
  SET /p L=
  IF %%i==%insertat% ECHO(!TL!
  ECHO(!L!
  ENDLOCAL
)
) >%tempfile%

COPY /Y %tempfile% %origfile% >NUL

DEL %tempfile%