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

Это мой пакетный файл. Он находит и считает слово "pdf" по всему файлу, но считает по каждой строке. Он не учитывает все случаи. Как мне все это посчитать?

1 ответ1

3

Как мне найти все вхождения слова "pdf" в файле?

Используйте следующий пакетный файл.

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
  • Замените abc.txt именем файла, содержащим ваш текст.
  • Заменить echo."pdf" was found !_count! times. с вашими собственными echo командами в зависимости от ситуации.

abc.txt

abc pdf def pdf
pdf
pdf pdf pdf
abc def ghi

пример использования

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

F:\test>

Что делать, если TXT-файл похож на это abc.pdf def.pdf pdf pdf pdf pdf abc def ghi Это только 4

В этом случае необходимо изменить вторую команду for /f чтобы использовать оба . а также (по умолчанию) в качестве разделителей для сопоставления.

Вот линия замены:

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

delims=. был добавлен.


дальнейшее чтение

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .