Tilføj nye linje i tekstfil med Windows-batchfil

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en tekstfil, der har mere end 200 linjer i den, og jeg vil blot tilføje en ny linje før linje 4. Jeg bruger Windows   XP.


Eksempel tekstfil før input:


header 1
header 2
header 3
details 1
details 2


Efter udgang:


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

Bedste reference


Jeg tror, ​​du bruger


echo Text >> Example.txt 


fungere?


I så fald ville svaret simpelthen være tilføjet en '.' (Dot) direkte efter ekkoet med intet andet der.


Eksempel:


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

Andre referencer 1


Du kan bruge:


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


eller noget som dette:


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

Andre referencer 2


DISCLAIMER: Den nedenstående løsning bevarer ikke efterfølgende faner.





Hvis du kender det nøjagtige antal linjer i tekstfilen, skal du prøve følgende metode:


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


Sløjfen læser linjer fra den originale fil en efter en og udsender dem. Udgangen omdirigeres til en midlertidig fil. Når en bestemt linje er nået, udføres en tom linje før den.


Efter færdiggørelsen slettes den oprindelige fil, og den midlertidige bliver tildelt det oprindelige navn.





UPDATE


Hvis antallet af linjer er ukendt på forhånd, kan du bruge følgende metode til at opnå det:


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


(Denne linje erstatter blot linjen SET totallines=200 i ovenstående script.)


Metoden har en lille fejl: Hvis filen slutter med en tom linje, bliver resultatet det faktiske antal linjer minus en. Hvis du har brug for en løsning (eller bare vil spille sikkert), kan du bruge metoden beskrevet i dette svar.

Andre referencer 3


Antag at du vil indsætte en bestemt tekstlinje (ikke en tom linje):


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