Como posso contar recursivamente as quebras de linha em uma pasta?

Como posso contar recursivamente as quebras de linha em uma pasta?

Gostaria de aprender um método nativo de linha de comando para contar linhas de código em qualquer projeto salvo no Windows.

Dessa forma, não importa onde estou trabalhando ou com qual linguagem/IDE estou trabalhando, saber o tamanho do projeto pode ser alcançado com um comando.

Supondo que eu queira direcionar uma extensão de arquivo específica no diretório de destino (e em todos os subdiretórios), qual poderia ser uma maneira eficaz de contar recursivamente o número de quebras de linha em uma pasta (e subpastas) na linha de comando do Windows?

Responder1

Se tudo que você precisa é a contagem total de linhas da linha de comando do Windows

(for /r "c:\somewhere" %a in (*.c) do @type "%a")|find /c /v ""

Responder2

Como posso contar recursivamente o número de linhas em arquivos em uma pasta?

Use o seguinte arquivo em lote (countlines.cmd)

@echo off
Setlocal EnableDelayedExpansion
for /f "usebackq" %%a in (`dir /b /s %1`)  do (
  echo processing file %%a
  for /f "usebackq" %%b in (`type %%a ^| find "" /v /c`) do (
    echo line count is %%b
    set /a lines += %%b
    )
  )
echo total lines is %lines%

Notas:

  • O número total de linhas é armazenado em %lines%.
  • remova echo ...conforme apropriado para um funcionamento silencioso.

Uso:

countlines filename_expression

Exemplo:

countlines *.java

produzirá o seguinte:

processing file F:\projects\test\foo.java
line count is 10
processing file F:\projects\test\test.java
line count is 106
processing file F:\projects\test\Wheel4Applet.java
line count is 350
total lines is 466

Leitura adicional

Responder3

Isso contará todas as linhas conforme o Powershell define linhas em MyTargetPath

Get-Content (Get-ChildItem -Recurse -Path MyTargetPAth -file).FullName | measure -line

Basta configurar MyTargetPath primeiro.

Responder4

Se você estiver lidando com arquivos muito grandes, haverá um ganho considerável de desempenho se você usar o redirecionamento de arquivos em vez de usar o PIPE. Testando com um arquivo de 437 MB com 8.895.540 linhas. A conexão com o comando find levou 14,6 segundos. Usando o redirecionamento, levou apenas 5,4 segundos. Se você estiver contando arquivos menores, a diferença seria insignificante.

@echo off
set "lines=0"
for /f "usebackq" %%a in (`dir /b /s %1`)  do (
  echo processing file %%a
  for /f %%b in ('find /V /C "" ^<"%%a"') do (
    echo line count is %%b
    set /a lines+=%%b
    )
  )
echo total lines is %lines%

informação relacionada