Jesse Vogt
Jesse Vogt

Reputation: 16499

Windows batch command(s) to read first line from text file

How can I read the first line from a text file using a Windows batch file? Since the file is large I only want to deal with the first line.

Upvotes: 102

Views: 395008

Answers (16)

mmj
mmj

Reputation: 5780

Here is a workaround using powershell:

powershell (Get-Content file.txt)[0]

(You can easily read also a range of lines with powershell (Get-Content file.txt)[0..3])

If you need to set a variable inside a batch script as the first line of file.txt you may use:

for /f "usebackq delims=" %%a in (`powershell ^(Get-Content file.txt^)[0]`) do (set "head=%%a")

To test it create a text file test.txt with at least a couple of lines and in the same folder run the following batch file (give to the file the .bat extension):

@echo off
for /f "usebackq delims=" %%a in (`powershell ^(Get-Content test.txt^)[0]`) do (set "head=%%a")
echo Hello
echo %head%
echo End
pause

In the command prompt window that will open, provided that the content of first line of test.txt is line 1, you will see

Hello
line 1
End
Press any key to continue . . .

Upvotes: 2

Zimba
Zimba

Reputation: 3673

Print 1st line only (no need to read entire file):

set /p a=< file.txt & echo !a!

To print one line at a time; user to press a key for next line:
(After printing required lines, press Ctrl+C to stop.)

for /f "delims=" %a in (downing.txt) do echo %a & pause>nul

To print 1st n lines (without user intervention):

type nul > tmp & fc tmp "%file%" /lb %n% /t | find /v "?" | more +2

Tested on Win 10 CMD.

Upvotes: -1

Ingmar
Ingmar

Reputation: 61

powershell Get-Content file.txt -Head 1

This one is much quicker than the other powershell examples above, where the full file is read.

Upvotes: 6

In Windows PowerShell below cmd can be used to get the first line and replace it with a static value

powershell -Command "(gc txt1.txt) -replace (gc txt1.txt)[0], 'This is the first line' | Out-File -encoding ASCII txt1.txt"

Reference


How can you find and replace text in a file using the Windows command-line environment?

Upvotes: 0

Laercio
Laercio

Reputation: 21

To cicle a file (file1.txt, file1[1].txt, file1[2].txt, etc.):

START/WAIT C:\LAERCIO\DELPHI\CICLADOR\dprCiclador.exe C:\LAERCIUM\Ciclavel.txt

rem set/p ciclo=< C:\LAERCIUM\Ciclavel.txt:
set/p ciclo=< C:\LAERCIUM\Ciclavel.txt

rem echo %ciclo%:
echo %ciclo%

And it's running.

Upvotes: 2

Timo Salmi
Timo Salmi

Reputation: 264

The problem with the EXIT /B solutions, when more realistically inside a batch file as just one part of it is the following. There is no subsequent processing within the said batch file after the EXIT /B. Usually there is much more to batches than just the one, limited task.

To counter that problem:

@echo off & setlocal enableextensions enabledelayedexpansion
set myfile_=C:\_D\TEST\My test file.txt
set FirstLine=
for /f "delims=" %%i in ('type "%myfile_%"') do (
  if not defined FirstLine set FirstLine=%%i)
echo FirstLine=%FirstLine%
endlocal & goto :EOF

(However, the so-called poison characters will still be a problem.)

More on the subject of getting a particular line with batch commands:

How do I get the n'th, the first and the last line of a text file?" http://www.netikka.net/tsneti/info/tscmd023.htm

[Added 28-Aug-2012] One can also have:

@echo off & setlocal enableextensions
set myfile_=C:\_D\TEST\My test file.txt
for /f "tokens=* delims=" %%a in (
  'type "%myfile_%"') do (
    set FirstLine=%%a& goto _ExitForLoop)
:_ExitForLoop
echo FirstLine=%FirstLine%
endlocal & goto :EOF

Upvotes: 1

hhay
hhay

Reputation: 19

Another way

setlocal enabledelayedexpansion
@echo off
for /f "delims=" %%i in (filename.txt) do (
if 1==1 (
set first_line=%%i
echo !first_line!
goto :eof
))

Upvotes: 1

Sarath Subramanian
Sarath Subramanian

Reputation: 21281

Try this

@echo off
setlocal enableextensions enabledelayedexpansion
set firstLine=1
for /f "delims=" %%i in (yourfilename.txt) do (
    if !firstLine!==1 echo %%i
    set firstLine=0
)
endlocal

Upvotes: 3

indiv
indiv

Reputation: 17846

Here's a general-purpose batch file to print the top n lines from a file like the GNU head utility, instead of just a single line.

@echo off

if [%1] == [] goto usage
if [%2] == [] goto usage

call :print_head %1 %2
goto :eof

REM
REM print_head
REM Prints the first non-blank %1 lines in the file %2.
REM
:print_head
setlocal EnableDelayedExpansion
set /a counter=0

for /f ^"usebackq^ eol^=^

^ delims^=^" %%a in (%2) do (
        if "!counter!"=="%1" goto :eof
        echo %%a
        set /a counter+=1
)

goto :eof

:usage
echo Usage: head.bat COUNT FILENAME

For example:

Z:\>head 1 "test file.c"
; this is line 1

Z:\>head 3 "test file.c"
; this is line 1
    this is line 2
line 3 right here

It does not currently count blank lines. It is also subject to the batch-file line-length restriction of 8 KB.

Upvotes: 52

Spaceballs
Spaceballs

Reputation: 2629

uh? imo this is much simpler

  set /p texte=< file.txt  
  echo %texte%

Upvotes: 249

Ross Fuhrman
Ross Fuhrman

Reputation: 638

You might give this a try:

@echo off

for /f %%a in (sample.txt) do (
  echo %%a
  exit /b
)

edit Or, say you have four columns of data and want from the 5th row down to the bottom, try this:

@echo off

for /f "skip=4 tokens=1-4" %%a in (junkl.txt) do (
  echo %%a %%b %%c %%d
)

Upvotes: 13

Amit Naidu
Amit Naidu

Reputation: 2638

Uh you guys...

C:\>findstr /n . c:\boot.ini | findstr ^1:

1:[boot loader]

C:\>findstr /n . c:\boot.ini | findstr ^3:

3:default=multi(0)disk(0)rdisk(0)partition(1)\WINNT

C:\>

Upvotes: 26

kevinjansz
kevinjansz

Reputation: 648

Note, the batch file approaches will be limited to the line limit for the DOS command processor - see What is the command line length limit?.

So if trying to process a file that has any lines more that 8192 characters the script will just skip them as the value can't be held.

Upvotes: 0

Jesse Vogt
Jesse Vogt

Reputation: 16499

Thanks to thetalkingwalnut with answer Windows batch command(s) to read first line from text file I came up with the following solution:

@echo off
for /f "delims=" %%a in ('type sample.txt') do (
echo %%a
exit /b
)

Upvotes: 6

PabloG
PabloG

Reputation: 26715

One liner, useful for stdout redirect with ">":

@for /f %%i in ('type yourfile.txt') do @echo %%i & exit

Upvotes: 3

Ray Hayes
Ray Hayes

Reputation: 15015

Slightly building upon the answers of other people. Now allowing you to specify the file you want to read from and the variable you want the result put into:

@echo off
for /f "delims=" %%x in (%2) do (
set %1=%%x
exit /b
)

This means you can use the above like this (assuming you called it getline.bat)

c:\> dir > test-file
c:\> getline variable test-file
c:\> set variable  
variable= Volume in drive C has no label.

Upvotes: 4

Related Questions