windows batch fil script til at udtrække tredje linje fra alle tekstfiler i en mappe

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har brug for en Windows-batch-scriptfil til at udtrække den tredje linje fra alle tekstfiler i en mappe og sende dem ud i en separat tekstfil. Kan nogen hjælpe mig med at skrive en batchfil for at hente disse oplysninger? Jeg er en rangbegynder på dette. Tak skal du have!

Bedste reference


Det er muligt, men kun med et lille hack.


Først skal du oprette en batchfil thirdline.cmd:


@echo off
for /f "skip=2 delims=" \%\%i in (\%1) do echo \%\%i & goto :EOF


Derefter vil fra kommandolinjen du gøre:


for \%i in (*.*) do @thirdline "\%i"


Hvis du vil gøre dette fra inde i en anden batchfil, skal du ændre \%i ovenfor til \%\%i (dvs. som de vises i thirdline.cmd).


Husk at erstatte *.* med filemasken, der matcher de filer, du vil behandle.


Endelig udleverer thirdline.cmd som angivet ovenfor bare den tredje linje til konsollen. Hvis du vil skrive det til en anden fil (lad os sige lines.txt), skift thirdline.cmd til:


@echo off
for /f "skip=2 delims=" \%\%i in (\%1) do >>lines.txt echo \%\%i & goto :EOF

Andre referencer 1


Helt som et alternativ, her er en anden tilgang:


SETLOCAL
(FOR /L \%\%i IN (1,1,3) DO SET /P line=) < filename.txt
> another.txt ECHO \%line\%
ENDLOCAL


Brug SETLOCAL & ENDLOCAL når du ikke kan være sikker på, om de variabler, du vil introducere med dit script, ikke vil kollidere med de allerede eksisterende, enten defineret af systemet eller bragt sammen af ​​et kaldet batch script, hvis nogen. , brug dem bare for at være på den sikre side. (Tak Jon for forslaget!)

Andre referencer 2


Hvis du har et valg, her er en Ruby til Windows en liner [16]


$ ruby -ne "ARGF.lineno=0 if ARGF.eof?; print if ARGF.lineno==3" *.txt