Como encontrar contagem de linhas presentes em um arquivo usando script em lote

3

Eu quero contar o número de linhas em um arquivo usando lote.

Eu passei por isto , mas não conseguia entender como sou iniciante. Eu escrevi meu próprio código com conhecimento básico.

@echo off
set "file=abc.csv"
set /a x=0
for /f "usebackq delims=" %%p in ("%file%") do (
  echo %x%
  pause>nul
  set /a x=%x%+1
)

Quando executo o código acima, estou recebendo 0 como saída. Alguém por favor pode me ajudar a resolver o erro?

learner1
fonte
2
Eu sei que você disse "Batch", mas sempre me dói ver código muito difícil e ilegível para uma tarefa tão fácil. Então aqui está uma solução do PowerShell: $a = (get-content "C:\abc.csv" | measure-object).count A variável $ a agora contém o número de linhas no seu arquivo.
SimonS
2
A linha de comando do @SimonS também é um liner;) Veja minha resposta. Eu acho arquivos em lote mais fáceis de ler do que o PowerShell;)
DavidPostill
2
@DavidPostill, mas você (não me entenda mal aqui) é um mestre do desastre da velha guarda ;-). Se você é iniciante no script do Windows, o PowerShell é definitivamente mais fácil de ler. Não / v ou / c mudar onde você precisa ler um arquivo de ajuda para obter o seu significado. Além disso, o PowerShell é o novo cmd (seu sucessor) e eu incentivaria qualquer administrador / criador de scripts a usar o PowerShell em vez do cmd.
SimonS

Respostas:

2

Eu quero contar o número de linhas em um arquivo usando lote

Solução específica

De uma linha de comando:

F:\test>for /f "usebackq" %b in (`type abc.csv ^| find "" /v /c`) do @echo line count is %b
line count is 1

De um arquivo em lote (countlines.cmd):

@echo off
Setlocal EnableDelayedExpansion
  for /f "usebackq" %%b in (`type abc.csv ^| find "" /v /c`) do (
    echo line count is %%b
    )
  )

Exemplo:

F:\test>countlines
line count is 1
F:\test>

Solução flexível

Use o seguinte arquivo em lotes (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:

  • Número total de linhas é armazenado em %lines%.
  • O arquivo em lote suporta curingas.
  • Puxão echo ... comandos conforme apropriado.

Uso:

countlines filename_expression

Exemplo:

F:\test>countlines *.csv
processing file F:\test\abc.csv
line count is 1
processing file F:\test\def.csv
line count is 1
total lines is 2

Leitura Adicional

DavidPostill
fonte
Perfeito !! Muito obrigada @ David
learner1
1

Uma maneira simples de contar o número de linhas em um arquivo em um sistema Microsoft Windows é usando o seguinte comando:

find /v /c "" somefile.txt

o /c opção conta o número de linhas enquanto o /v opção exibe todas as linhas que não contêm a string especificada. Como a string nula, ou seja, "", é tratada como nunca correspondendo, você deve ver o número de linhas no arquivo exibido - veja o Truque de linha de comando idiota: contando o número de linhas no stdin artigo no Blog de desenvolvedores da Microsoft de Raymond Chen, A velha novidade para uma explicação de por que isso funciona e como um bug no mais antigo MS-DOS A versão do comando find tornou-se um recurso que permanece até hoje. O sistema operacional MS-DOS era um sistema operacional para PCs antigos fornecidos pela Microsoft muito antes de a empresa criar o Microsoft Windows.

moonpoint
fonte
Isso também está funcionando perfeito @moonpoint. Obrigado pela explicação detalhada.
learner1