Добавить новую строку в текстовый файл с помощью командного файла 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

Ответы

Ответ 1

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

echo Text >> Example.txt 

функция?

Если так, то ответ будет просто добавлением ".". (Dot) непосредственно после эха, где ничего нет.

Пример:

echo Blah
echo Blah 2
echo. #New line is added
echo Next Blah

Ответ 2

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

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

Ответ 3

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: нижеприведенное решение не сохраняет завершающие вкладки.


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

@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%

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

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


UPDATE

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

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

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

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

Ответ 4

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

@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%