How to count no of lines in text file and store the value into a variable using batch script?

前端 未结 16 1148
青春惊慌失措
青春惊慌失措 2020-11-27 14:28

I want to count the no of lines in a text file and then the value has to be stored into a environment variable. The command to count the no of lines is

findstr /R         


        
相关标签:
16条回答
  • 2020-11-27 14:54

    I usually use something more like this for /f %%a in (%_file%) do (set /a Lines+=1)

    0 讨论(0)
  • 2020-11-27 14:54

    The perfect solution is:

    FOR /F %%i IN ('TYPE "Text file.txt" ^| FIND /C /V ""') DO SET Lines=%%i
    
    0 讨论(0)
  • 2020-11-27 14:57

    Try this:

    @Echo off
    Set _File=file.txt
    Set /a _Lines=0
    For /f %%j in ('Find "" /v /c ^< %_File%') Do Set /a _Lines=%%j
    Echo %_File% has %_Lines% lines.
    

    It eliminates the extra FindStr and doesn't need expansion.


    - edited to use ChrisJJ's redirect suggestion. Removal of the TYPE command makes it three times faster.

    0 讨论(0)
  • 2020-11-27 15:01

    There is a much simpler way than all of these other methods.

    find /v /c "" filename.ext
    

    Holdover from the legacy MS-DOS days, apparently. More info here: https://devblogs.microsoft.com/oldnewthing/20110825-00/?p=9803

    Example use:

    adb shell pm list packages | find /v /c ""
    

    If your android device is connected to your PC and you have the android SDK on your path, this prints out the number of apps installed on your device.

    0 讨论(0)
  • 2020-11-27 15:02

    You don't need to use find.

    @echo off
    set /a counter=0
    for /f %%a in (filename) do set /a counter+=1
    echo Number of lines: %counter%
    

    This iterates all lines in the file and increases the counter variable by 1 for each line.

    0 讨论(0)
  • 2020-11-27 15:03

    I found this solution to work best for creating a log file that maintains itself:

    setlocal enabledelayedexpansion
    SET /A maxlines= 10
    set "cmd=findstr /R /N "^^" "filename.txt" | find /C ":""
     for /f %%a in ('!cmd!') do set linecount=%%a
    GOTO NEXT
    
    :NEXT 
     FOR /F %%A IN ("filename.txt") DO ( 
      IF %linecount% GEQ %maxlines% GOTO ExitLoop
      echo %clientname% %Date% %Time% >> "filename.txt")
     EXIT
    
    :ExitLoop
     echo %clientname% %Date% %Time% > "filename.txt"
     EXIT
    

    Environmental variables included are %clientname% the computername of the remote client %Date% is the current date and %Time% the current time. :NEXT is called after getting the number of lines in the file. If the file line count is greater than the %maxlines% variable it goes to the :EXITLOOP where it overwrites the file, creating a new one with the first line of information. if it is less than the %maxlines% variable it simply adds the line to the current file.

    0 讨论(0)
提交回复
热议问题