Добавить новую строку в текстовом файле с пакетным файлом Windows - PullRequest
20 голосов
/ 13 сентября 2011

У меня есть текстовый файл, который содержит более 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 ]

24 голосов
/ 13 сентября 2011

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

echo Text >> Example.txt 

функция

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

Пример:

echo Blah
echo Blah 2
echo. #New line is added
echo Next Blah
3 голосов
/ 24 ноября 2011

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

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
1 голос
/ 13 сентября 2011

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


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

@ECHO OFF
SET origfile=<i>original file</i>
SET tempfile=<i>temporary file</i>
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 вприведенный выше скрипт.)

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

0 голосов
/ 04 сентября 2013

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

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