tags:

views:

211

answers:

2

I'm looking for a DOS batch program that takes a file:

First input line
Second input line
Third input line...

And outputs "First input line"

+5  A: 

Assuming you mean the Windows cmd interpreter (I'd be surprised if you really were still using DOS), the following script will do what you want:

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

With an input file of infile.txt as:

line 1
line 2
line 3

this will output:

line 1

This will still process all the lines, it just won't print those beyond line 1. If you want to actually stop processing, use something like:

@echo off
setlocal enableextensions enabledelayedexpansion
for /f "delims=" %%i in (infile.txt) do (
    echo %%i
    goto :endfor
)
:endfor
endlocal

Or you could just go get your hands on Cygwin or GnuWin32 and use the head program. That's what I'd do. But, if that's not an option (some workplaces don't allow it), you can create a similar cmd file in Windows itself as follows (winhead.cmd):

@echo off
setlocal enableextensions enabledelayedexpansion

if x%1x==xx goto :usage
if x%2x==xx goto :usage

set /a "linenum = 0"
for /f "usebackq delims=" %%i in (%1) do (
    if !linenum! geq %2 goto :break1
    echo %%i
    set /a "linenum = linenum + 1"
)
:break1
endlocal
goto :finish

:usage
echo.winhead ^<file^> ^<numlines^>
echo.   ^<file^>
echo.      is the file to process
echo.      (surround with double quotes if it contains spaces).
echo.   ^<numlines^>
echo.      is the number of lines to print from file start.
goto :finish

:finish
endlocal
paxdiablo
Oh, you only need `for` if you either need all or the last input line. For getting the first line using `set /p` is much easier.
Joey
You can also avoid needing delayed expansion by testing for `first` with `if not defined first` and un-setting it after the first line.
Joey
Avoid needing it? Why? It's the best thing since sliced bread! Just about every one of my scripts starts with that setlocal line; it's brilliant.
paxdiablo
+5  A: 

you can just get the first line like this

set /p firstline=<file
echo %firstline%
ghostdog74