Como faço para contar todas as ocorrências de uma determinada string em um arquivo usando um arquivo em lotes?

2
setlocal EnableDelayedExpansion

for /f %%C in ('Find /C "pdf" ^< %CD%\sample.txt') do set Count=%%C
    echo Found = !Count! time/s >> xerox.log
    echo Found = %%C time/s

pause

Esse é o meu arquivo de lote. Ele encontra e conta a palavra "pdf" em todo o arquivo, mas conta por linha. Não conta todas as ocorrências. Como faço para contar tudo isso?

    
por greyMatter 13.07.2015 / 11:27

1 resposta

3

Como encontro todas as ocorrências da palavra "pdf" em um arquivo?

Use o seguinte arquivo em lotes.

test.cmd

@echo off
setlocal
setlocal EnableDelayedExpansion
set _count=0
set _match=pdf
set _file=abc.txt

for /f "tokens=*" %%i in (%_file%) do (
  set _line=%%i
  call :match
  )
 goto :done

:match
  for /f "tokens=1,*" %%a in ("%_line%") do (
    set _word=%%a
    set _line=%%b
  )
  if /i "%_word%"=="%_match%" set /a _count=!_count!+1
  if "%_line%"=="" goto :eof
goto :match

:done
echo."pdf" was found !_count! times.

endlocal
  • Substitua abc.txt pelo nome do arquivo que contém seu texto.
  • Substitua echo."pdf" was found !_count! times. pelos seus próprios comandos echo conforme apropriado.

abc.txt

abc pdf def pdf
pdf
pdf pdf pdf
abc def ghi

uso de exemplo

F:\test>test
"pdf" was found 6 times.

F:\test>

e se o arquivo txt for assim abc.pdf def.pdf pdf pdf pdf pdf abc def ghi Só conta 4

Nesse caso, o segundo comando for /f precisa ser alterado para usar os . e (o padrão) como delimitadores para a correspondência.

Aqui está a linha de substituição:

  for /f "tokens=1,* delims=. " %%a in ("%_line%") do (

delims=. foi adicionado.

Outras leituras

por 13.07.2015 / 12:57