Comment puis-je compter toutes les occurrences d'une chaîne particulière dans un fichier à l'aide d'un fichier batch?

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 

C'est mon fichier batch. Il trouve et compte le mot "pdf" dans tout le fichier, mais il compte par ligne. Il ne compte pas toutes les occurrences. Comment puis-je compter tout cela?

Comment trouver toutes les occurrences du mot «pdf» dans un fichier?

Utilisez le fichier de commandes suivant.

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 
  • Remplacez abc.txt par le nom de fichier contenant votre txt.
  • Remplacez l' echo."pdf" was found !_count! times. echo."pdf" was found !_count! times. Avec vos propres commandes d' echo le cas échéant.

Abc.txt

 abc pdf def pdf pdf pdf pdf pdf abc def ghi 

Exemple d'utilisation

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

abc.pdf def.pdf pdf pdf pdf pdf abc def ghi t-il si le fichier txt est comme ceci abc.pdf def.pdf pdf pdf pdf pdf abc def ghi Il compte seulement 4

Dans ce cas, la deuxième commande for /f doit être modifiée pour utiliser les deux . et (Par défaut) en tant que délimiteurs pour la correspondance.

Voici la ligne de rechange:

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

delims=. a été ajouté.


Autres lectures

  • Pour – Exécuter conditionnellement une commande plusieurs fois
  • Un index AZ de la ligne de commande CMD de Windows – Une excellente référence pour toutes les fonctionnalités de Windows cmd.