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