Batch command to take only first line from input

后端 未结 3 1469
走了就别回头了
走了就别回头了 2020-12-19 20:10

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 li

相关标签:
3条回答
  • 2020-12-19 20:14

    why not use the more +1 command via a pipe?

    e.g.

    type something | more +1

    0 讨论(0)
  • 2020-12-19 20:24

    you can just get the first line like this

    set /p firstline=<file
    echo %firstline%
    
    0 讨论(0)
  • 2020-12-19 20:29

    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
    
    0 讨论(0)
提交回复
热议问题